2013-11-05 51 views
0

我有我的索引页,其中显示项目列表。索引页是可观察的。我点击列表中的记录来加载用户可以修改数据的详细页面。我可以使用jQuery ajax成功地将修改发布到服务器,并且我返回更新的记录,以便我可以更新索引页上的列表。我无法弄清楚如何使用将更新发布到服务器的结果更新索引页面的下联数据。我试着实例化一个新的IndexViewModel,但UI并不反映新模型。我试过ko.mapping.fromJS(sourceData,targetObservableViewModel),但索引页面的UI不更新。如何从完全不同的页面上成功提交ajax提交更新索引页面的底层数据?KnockoutJS更新隐藏页面上的ViewModel

 ApplicationUtils.AjaxRequestSendData 
    (
     'POST', 
     saveUrl, 
     dataModel, 
     function (jsonFromServer) 
     { 
      updateViewModel(jsonFromServer, self.activeGamesList); 
      history.back(); 
     }, 
     function (resultsFromServer) 
     { 
      alert('errror happened. not sure what happened though.'); 
     }   
    ); 

var updateViewModel = function (sourceData, targetObservableViewModel){ 
ko.mapping.fromJS(sourceData, targetObservableViewModel);}; 

感谢您的帮助。

回答

1

我的地方,而不是答案评论,要求使用其他技术的进一步的细节,但没有足够的代表尚未:(

在这种情况下,你可以使用两种解决方案:

  1. 简单而昂贵:当你的视图模型加载时,你要做的第一件事是删除现有数据并从服务器查询新数据。

  2. 让另一个javascript对象保存你的数据并通过不同的viewmodels传递它。 ,而不是g来回服务器获取新数据,你的视图模型只保存指向数据的指针,当你保存时,你会告诉那个javascript对象来处理你的保存/重载。一旦数据发生变化,您的其他视图模型会立即“看到”更改,因为它包含指向该数据的指针。

第二个选项是基于热毛巾SPA模板提供了非常简单和有效的解决方案 - 所以,如果可以的话,我建议你检查一下,看看是否可以使用它的任何。

+0

它看起来像热毛巾可能是什么,我需要解决我的问题。我认为Hot Towel会提供我正在努力的应用程序结构(方法)。感谢您的指导。 –

1

ko.mapping.fromJS可以取3个参数...并使用第三个参数,您必须提供第二个参数。你已经展示的是你想要使用targetObservableViewModel映射配置映射现有的sourceData。这个语句应该返回的是一个映射对象......但是您不会将它分配给任何东西。如果您希望targetObservableViewModel成为此映射的目标,则需要在第二个参数中滑动。如果你没有一个映射配置参考,只使用{} ...一个空的对象...

ko.mapping.fromJS(sourceData, {}, targetObservableViewModel)