1

我有以下 knockout.js 映射代码:

    //JSON string
    var startData= {"Name":"SMT","Price":{"Value":22,"Currency":"EUR"}}";

    //convert json to model
    var viewModel = ko.viewmodel.fromModel(startData);

    viewModel.deletePrice= function() {
        delete this.Price;
    };

  ko.applyBindings(viewModel);

然后,我有以下模板,在页面上显示价格嵌套对象:

<script type="text/html" id="PriceTemplate">
//render Value and Currency properties from nested object Price
</script>

然后在我的代码中,我将 Price 对象绑定到模板 PriceTemplate - 这一切正常。

<div data-bind="template: { name: 'PriceTemplate', data: Price, templateOptions: { title: 'Prc'} }"></div>

    <a href="#" data-bind="click: function() { deletePrice() }">Delete Price</a>

问题是这个功能deletePrice()。当它被调用时,它会删除嵌套对象 Price,但模板仍然会在页面上呈现初始数据。

我的问题-如何删除 Price 嵌套对象并同时删除呈现的模板?

4

2 回答 2

1

我刚刚找到了一个解决方案(使用 ViewModel 淘汰赛扩展):

var viewModel = ko.viewmodel.fromModel(startData,{
    extend:{
        "{root}.Price":function(obj){
     return typeof(obj) == "object" ? ko.observable(obj) : ko.observable(null);    
                        }
    }
});

viewModel.deletePrice = function() {
    this.Price(null);
};
于 2013-10-09T20:18:46.973 回答
0

您正在从不是可观察事件的对象中删除该属性。你有什么理由不能将价格的价值设置为可观察的this.Price(null)吗?这将触发更新 UI 所需的可观察更改。

于 2013-10-08T17:47:11.327 回答