【问题标题】:Creating elements of observableArrays as observables (deep mapping)将 observableArrays 的元素创建为可观察对象(深度映射)
【发布时间】:2012-11-28 08:44:17
【问题描述】:

我是地图插件的新手,我认为我遗漏了一些明显的东西。

如何让 ko.mapping 将可观察数组的成员“深度”创建为可观察对象?我在文档中查看了“创建回调”和“选项”,但没有看到任何明显的东西。

我有一个相当大的对象模型,因此不想手动绑定 viewModel。此外,作为一个附带问题,可能还需要动态添加元素作为可观察对象。

html

<p>
    here, ko.mapping succesfully creates an observable...<br/>
    <input data-bind="value:someText, valueUpdate:'afterkeydown'"></input>
</p>

<p>
    however, here, the contents of the observable array are not observables...</br>    
    <span data-bind="foreach: { data: years, as: 'year' }">

   <input data-bind="value:year, valueUpdate:'afterkeydown'"></input>

    <br />
    </span>
    <button data-bind="click:function(){addYear();}">add</button>
</p>

<p><br /><br /><div data-bind="text: ko.toJSON($root)"></div></p>

javascript

var model={    
    someText: 'Hello',        
    years:[2000,2001,2002]
};

var viewModel = ko.mapping.fromJS(model);
viewModel.addYear=function(){viewModel.years.push(ko.observable(""));}
ko.applyBindings(viewModel);

Here's jsFiddle 链接

非常感谢您的帮助,

DS

【问题讨论】:

    标签: knockout.js knockout-mapping-plugin


    【解决方案1】:

    我不得不将您的数组更改为属性数组,而不仅仅是数字。如果您只有一个数组编号,则映射插件不会将它们转换为可观察对象。

    var model={    
        someText: 'Hello',        
        years:[{item:2000},{item:2001},{item:2002}]
        };
    

    Updated Fiddle

    【讨论】:

      猜你喜欢
      • 2017-06-02
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多