2016-02-17 2 views
2
Short Example: 
<div data-bind="foreach: firstArray"> 
    <span data-bind="text: title"></span> 
    <input type="checkbox" data-bind="click: $parent.delete"/> 
</div> 
<div data-bind="foreach: secArray"> 
    <span data-bind="text: title"></span> 
    <input type="checkbox" data-bind="click: $parent.delete"/> 
</div> 

[...] 
self.firstArray = ko.observableArray([]); 
self.delete = function (item, event) { 
     self.firstArray.remove(item); 
} 
[...] 

Проблема: у меня есть 2 массива, которые используют ту же функцию, в которой я хочу знать, откуда элемент (начиная с первого или с secArray).Перехват нокаутом, как получить массив «текущего элемента»?

+1

Почему бы вам не создать две функции: removeFromFirst, removeFromSecond? – nemesv

+0

Вы можете просто передать родительский элемент в качестве параметра функции удаления. – Robert

+0

Я думал, что должно быть возможно, чтобы он передал массив в функцию или сделал что-то вроде item.parent.remove (item), которое было бы более красивым, чем создание функций. Также у меня будет эта проблема чаще всего в моем коде – JSTW1212

ответ

2

Вам просто нужно передать массив в функцию удаления. как:

<div data-bind="foreach: firstArray"> 
    <span data-bind="text: title"></span> 
    <input type="checkbox" data-bind="click: $parent.delete.bind($data, $parent.firstArray)"/> 
</div> 

И ваш ViewModel должны знать, что вы прошли функцию и this ваш текущий элемент.

self.firstArray = ko.observableArray([]); 
self.delete = function (array) { 
    array.remove(this); 
} 

Подробнее вы можете прочитать по ссылке привязки here. Здесь указывается, как передавать параметры.

+1

Спасибо, это немного разное data-bind = "click: function (data) {$ parent.delete ($ parent.firstArray, data)} «результат тот же :) до того, как я просто передал строку, это намного лучше :) – JSTW1212

+0

Нет проблем, это просто собственные настройки, мне не нравится загромождать мои htmls: D – Adrian

+0

@ JSTW1212 '$ parent.delete.bind ($ parent.firstArray)' будет работать одинаково. –

1

Почему у вас нет двух функций?

<div data-bind="foreach: firstArray"> 
    <span data-bind="text: title"></span> 
    <input type="checkbox" data-bind="click: $parent.deleteFromFirst"/> 
</div> 
<div data-bind="foreach: secArray"> 
    <span data-bind="text: title"></span> 
    <input type="checkbox" data-bind="click: $parent.deleteFromSecond"/> 
</div> 

[...] 
self.firstArray = ko.observableArray([]); 
self.deleteFromFirst = function (item, event) { 
     self.firstArray.remove(item); 
} 
self.secArray = ko.observableArray([]); 
self.deleteFromSecond = function (item, event) { 
     self.secArray.remove(item); 
} 
[...] 
Смежные вопросы