【问题标题】:KnockoutJS update ViewModel on a hidden pageKnockoutJS 在隐藏页面上更新 ViewModel
【发布时间】:2013-11-05 06:47:38
【问题描述】:

我有我的索引页,其中显示了项目列表。索引页是可观察的。我单击列表中的一条记录以加载用户可以修改数据的详细信息页面。我可以使用 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);};

感谢您的帮助。

【问题讨论】:

    标签: knockout.js knockout-2.0 knockout-mapping-plugin


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 看来热毛巾可能是我解决问题所需要的。我认为 Hot Towel 将提供我正在努力解决的应用程序结构(方法)。谢谢你的指导。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-09-19
      • 2011-08-16
      • 1970-01-01
      • 2011-05-30
      • 2012-07-31
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多