淘汰克隆整个项目在foreach

时间:2014-03-13 06:33:41

标签: html knockout.js

我正在尝试在单击按钮时克隆元素。我试图使用ko.toJS。在页面加载它工作正常,但当我想克隆项目时,它无法绑定项目(如,值,文本等)。

这是HTML:

<div class="stockItems-inner" data-bind="foreach: StockItems">
    <div data-bind="if: Type=='Input'">
        <div class="stock_container_input">
            <input type="text" data-bind="value: Value" />
        </div>
     </div>
     <div data-bind="if: Type=='Radio'">
        <div class="stock_container_control">
        <div data-bind="foreach: Options">
            <div class="stockLbl">
               <input type="radio" data-bind="text: Text, checked:$parent.Value, attr:{'id':Id, 'name': $parent.Text, 'value': Value}" />
               <label data-bind="attr:{'for':Id}, text: Text"></label>
            </div>
        </div>
       </div>
    </div>
</div>
<div class="addItem">
    <button type="button" data-bind="click: CloneItem"><img src="images/add.png" alt="" /></button>
</div>

视图模型:

ConfigurationStockViewModel =  function() {
var self = this;


this.StockItems = ko.observableArray();


this.ApplyData = function(data){

    self.StockItems(data.Items);

}

this.CloneItem = function(StockItems){
    self.StockItems.push(ko.toJS(StockItems));
};
};

单击该按钮时,将引发错误:Unable to process binding。我正在使用JSON数据进行绑定。

1 个答案:

答案 0 :(得分:0)

如果没有工作代码,不完全确定你想要的最终结果,但听起来你想要克隆数组中的最后一项并添加到数组?

如果是这样,我认为你有一个错误 - 你的添加按钮点击绑定永远不会将任何内容传递给你定义的函数,因为它在foreach之外。你需要这样的东西:

this.CloneItem = function() {
    var toClone = self.StockItems()[self.StockItems().length - 1]
    self.StockItems.push(toClone);
};

这是一个没有单选按钮等的简化示例:

http://jsfiddle.net/5J47L/