2015-11-01 8 views
0

У меня есть следующие хелперы определены:JsViews Data-Link Helper Функция

$.views.helpers({ 
    total: function(lines) { 
     var total = 0; 

     for (var i = 0; i < lines.length; i++) { 
      total += lines[i].price * lines[i].quantity; 
     } 

     return total; 
    } 
}); 

Тогда у меня есть следующий код, чтобы данные связать свою модель на мой взгляд:

var model = { 
    lines: [] 
}; 

$("#lines").link(true, model); 

Наконец в поле зрения У меня есть следующее:

<span data-link="~total(lines)"></span> 

Однако, когда я наблюдаю добавление или удаление элементов из массива, это не так pdate итог. Я читал, что вы можете передать в line.length функцию, и действительно, она обновляла общее количество каждый раз, когда я добавлял или удалял элемент. Но когда я наблюдал обновленное свойство количества против любой из строк, сумма не обновлялась.

Буду признателен, если кто-нибудь покажет мне, как это сделать.

Благодаря

ответ

0

Да, как вы нашли с https://github.com/BorisMoore/jsviews/issues/280, в настоящее время нет декларативного синтаксиса в зависимости от «Все». Вероятно, после того, как V1.0, что функция будет добавлено - вдоль линий total.depends = "lines**"; или total.depends = "lines*.*"; для помощника: function total(...) ...

Того времени вы можете использовать программный подход - который по-прежнему очень легко. Просто запустить обновление, добавив:

$.observable(model.lines).observeAll(function() { 
    $("#lines").link(true, model); 
}) 

или обновить только 'общий' срок в письменной форме:

<span id="total" data-link="~total(lines)"></span> 

и

$.observable(model.lines).observeAll(function() { 
    $("#total").link(true, model); 
}) 

Смотрите, например: http://jsfiddle.net/BorisMoore/wch601L9/

+0

Спасибо Борису , Я использовал его в производстве на некоторое время, и он был очень стабильным, поэтому я уверен, что v1 не за горами. Я бы попросил только одно небольшое предложение. Было бы неплохо, если бы вы могли сказать $ (селектор) .link (model) вместо передачи в true. Если посмотреть на код, это должен быть случай проверки, является ли первый параметр объектом. – nfplee

+0

Синтаксис с использованием $ (селектор) .link (true, model ...) имеет то преимущество, что он четко отличается от $ (селектор) .link (linkExpression, model ...). Если существует «истина», то она активирует декларативные выражения для передачи данных. Если нет, то он программно связывает linkExpression. Усилия прохождения в этом булевом я считаю оправданным тем, что «самодокументирующийся» характер API. Второй параметр всегда является моделью. Первый - это либо флаг (true) для декларативного связывания, либо выражение - для программной привязки. – BorisMoore

+0

Спасибо за разъяснение. Есть ли у вас примеры связывания программ? Я использовал только декларативное связывание, передавая true. – nfplee

0

Я нашел следующий вопрос, который имеет несколько предложенных исправлений:

https://github.com/BorisMoore/jsviews/issues/280

К сожалению, оба ABIT рубить, но я предполагаю, что это придется делать сейчас ,