0

我有我的索引页,我在其中显示项目列表。索引页是可观察的。我单击列表中的一条记录以加载用户可以修改数据的详细信息页面。我可以使用 jQuery ajax 成功地将修改发布到服务器,并返回更新的记录,因此我可以更新索引页面上的列表。我无法弄清楚如何使用将更新发布到服务器的结果来更新索引页面的基础数据。我尝试实例化一个新的 IndexViewModel,但 UI 没有反映新模型。我试过 ko.mapping.fromJS(sourceData, targetObservableViewModel),但索引页面的 UI 没有更新。如何通过在完全不同的页面上成功提交 ajax 来更新索引页面的基础数据?

        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);};

谢谢你的帮助。

4

2 回答 2

1

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

ko.mapping.fromJS(sourceData, {}, targetObservableViewModel)
于 2013-11-05T19:53:26.603 回答
1

我会发表评论而不是回答,以询问有关使用的其他技术的更多详细信息,但还没有足够的代表:(

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

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

  2. 让另一个 javascript 对象保存您的数据并通过不同的视图模型传递它。在这种情况下,您的视图模型将只保存指向数据的指针,而不是在服务器上来回获取新数据,并且在保存时,您会告诉该 javascript 对象来处理您的保存/重新加载。一旦数据更改,您的其他视图模型将立即“看到”更改,因为它拥有指向该数据的指针。

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

于 2013-11-05T09:29:31.507 回答