我正在尝试在单击按钮时克隆元素。我试图使用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数据进行绑定。
答案 0 :(得分:0)
如果没有工作代码,不完全确定你想要的最终结果,但听起来你想要克隆数组中的最后一项并添加到数组?
如果是这样,我认为你有一个错误 - 你的添加按钮点击绑定永远不会将任何内容传递给你定义的函数,因为它在foreach之外。你需要这样的东西:
this.CloneItem = function() {
var toClone = self.StockItems()[self.StockItems().length - 1]
self.StockItems.push(toClone);
};
这是一个没有单选按钮等的简化示例: