KnockoutJS - 更新视图模型/映射插件(KnockoutJS - Update View

2019-07-30 18:16发布

如何更新完整的视图模型?

  1. 在页面加载我得到一个模型转换,使用ko.mapping.fromJS(myObject)到一个视图模型。
  2. 如果用户点击一个按钮,我想从服务器获取更新的数据
  3. 现在,我想申请theese更新

如果我使用ko.applyBindings(viewModel); 它完美地更新UI。 但它再次添加相同的事件。 因此,如果用户点击该按钮时,会触发该事件两次,第三等。

什么是更新我的完整视图模型的好方法。 也许我删除绑定,然后再次申请呢? (这该怎么做)。

样品

var viewModel;

function update() 
{
    $.ajax({
        url: '...',
        type: "GET",
        statusCode: {
            200: function (data) {
                 viewModel = ko.mapping.fromJS(data);
                 ko.applyBindings(viewModel);
            }
        }
    });    
}

// first call after page load
update();

// user click
$("#myButton").click(function() {
    update(); 
});

更新

史蒂夫Greatrex你能发表您的自定义绑定实现?

ko.bindingHandlers.domBinding = {
    init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        viewModel.domElement = element;
    },
    update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
        viewModel.domElement = element;
    },
};

Answer 1:

如果你看一下在“指定更新目标的映射文件 ,你可以指定映射的目标。

这应该意味着,你可以说:

if (!viewModel)
   viewModel = ko.mapping.fromJS(data);
else
   ko.mapping.fromJS(data, {}, viewModel); 

这样,您将创建初始负载视图模型,然后更新任何后续加载该视图模型。



Answer 2:

使用映射插件我这样做

ko.mapping.fromJS(JsonResponse, myObservable());

就这样。



文章来源: KnockoutJS - Update ViewModel / Mapping Plugin