Как связать элементы с моделью в Knockoutjs - PullRequest
1 голос
/ 18 января 2012

Я хочу добавить продукт, найти узел и дать ему мигать

products = observableArray([]);

new_product = new Product();
products.push(new_product);
$("tr", new_product.elements).flash();

Я пытался использовать afterAdd, но он мигал каждый раз, когда я что-то добавлял.Мне нужно прошить только с одной из моих функций добавления.Другие функции, которые добавляют, не должны мигать элементом.

ПРИМЕЧАНИЕ: flash - это пользовательская функция JQuery

1 Ответ

4 голосов
/ 18 января 2012

Поскольку наблюдаемое может быть привязано к нескольким элементам, вам лучше всего получить его из элемента в форме пользовательской привязки.

В простейшем случае вы можете использовать привязку, например:

ko.bindingHandlers.flash = {
    init: function(element) {
        $(element).flash();
    }
};

Используйте его на вашем элементе как: <li data-bind="flash: true"></li>.В этом случае то, что вы передаете в привязку, не имеет значения.

Вот пример: http://jsfiddle.net/rniemeyer/Exmvh/

Вы, безусловно, можете передать параметры своей привязке, например:

ko.bindingHandlers.flash = {
    init: function(element, valueAccessor) {
        var duration = ko.utils.unwrapObservable(valueAccessor());
        $(element).hide().flash(duration);
    }
};

И используйте это как: <li data-bind="flash: 500"></li> или используйте наблюдаемое, которое вы можете использовать для управления продолжительностью: <li data-bind="flash: selectedDuration"></li>

Вот пример: http://jsfiddle.net/rniemeyer/Exmvh/1/

...