Javascript knockoutjs在foreach绑定中单击绑定

Javascript knockoutjs在foreach绑定中单击绑定,javascript,knockout.js,Javascript,Knockout.js,编辑:问题与绑定无关,而是与一个简单的JavaScript错误有关。 我有一个关于foreach绑定中的click绑定的问题。 我有一个列表,其中的项目显示一个下拉框,用于从主数据中选择一个值。可以从该列表中添加和删除项目。 删除项的按钮嵌套在foreach绑定中。因此,我希望我应该用$parent> <button data-bind="click: $parent.removeNumber">-</button> 我创建了一个小提琴(不工作的版本): 谢谢你的帮助

编辑:问题与绑定无关,而是与一个简单的JavaScript错误有关。

我有一个关于foreach绑定中的click绑定的问题。 我有一个列表,其中的项目显示一个下拉框,用于从主数据中选择一个值。可以从该列表中添加和删除项目。 删除项的按钮嵌套在foreach绑定中。因此,我希望我应该用$parent>

<button data-bind="click: $parent.removeNumber">-</button>
我创建了一个小提琴(不工作的版本):


谢谢你的帮助。

你让我等了一会儿

您是正确的,
$parent
应该是必需的。您的错误是没有在viewmodel中定义
self
。执行此操作后,removeButton上需要
$parent
,同时还需要
主数据
绑定

这是一把小提琴:

<button data-bind="click: removeNumber">-</button>
<h2>numbers:</h2>
 <ul data-bind="foreach: numbers">
     <li>
       <select data-bind="value: id, 
                          options: masterData, 
                          optionsText: 'caption', 
                          optionsValue: 'id'"></select>
        <br />
        value: <span data-bind="text: id"></span>
        <br />
        <button data-bind="click: $parent.removeNumber">-</button>      
    </li>
</ul>
<button data-bind="click: addNumber">+</button>
function ViewModel() {
    self.masterData = [{ id: 1, caption: "One"},
                       { id: 2, caption: "Two"}];

   self.numbers = ko.observableArray([{
        id: ko.observable(2)}]);

    self.addNumber = function() {
        self.numbers.push({
            id: ko.observable(2)
        });
    };


    self.removeNumber = function(item) {
        self.numbers.destroy(item);
        console.log("removed" + item);
    };
}

var viewModel = new ViewModel();
ko.applyBindings(viewModel);​