JsViews: проблема двустороннего связывания

Когда вы связываете дополнительный атрибут в data-link, перестали работать значения по умолчанию bindng и trigger=true. Там нет ошибки или ничего очевидного. Но это не работает.

привязка по умолчанию

В этом примере ( http://jsfiddle.net/BorisMoore/wch601L9/) свойство "amount" связывается без явной установки атрибута (например, value{:amount}). Оно работает!

<td><input data-link="amount trigger=true" /></td>

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

<td><input data-link="amount trigger=true disabled{:isSameAmountForAll}" /></td>

Здесь ( http://jsfiddle.net/michaelsync/xzo15n0s/) моя версия форка примера BorisMoore, и я внес изменения, чтобы показать этот сценарий.

Решение, которое я нашел, состоит в том, чтобы установить имя атрибута для всех привязок явно.

<td><input data-link="value{:amount} trigger=true disabled{:isSameAmountForAll}" /></td>

Это известная проблема?

триггер = истина

Если вы введете несколько чисел в текстовое поле (пример примера http://jsfiddle.net/michaelsync/xzo15n0s/), вы увидите, что общее количество не обновляется.

Я не уверен, как обойти это. Это тоже известная проблема?

Не стесняйтесь, дайте мне знать, если этот вопрос не ясен. Спасибо!

Примечание. Если вам интересно, почему я хочу связать два атрибута, то это пример, который я тестирую. http://jsfiddle.net/michaelsync/078cazh8/2/

Обновлено #1:

Я сейчас отлаживаю исходный код JsViews. Я изменил мой пример кода для отладки.

Вот v1. http://jsfiddle.net/michaelsync/tmwyhc7n/1/

Шаблон только с одной привязкой

<script id="personTmpl" type="text/x-jsrender">
    <input data-link="amount trigger=true" /> <br/>
</script>

<div id="placeholder" ></div>

JS

var myTemplate = $.templates("#personTmpl");

var people = [
  {
    name: "Adriana",
    amount:  10,
    isSameAmountForAll: false      
  }
];

myTemplate.link("#placeholder", people);

Я установил точку останова на function parseTag(all, bind, tagName, converter, colon, html, comment, codeTag, params, slash, closeBlock, index)

Я получил только удар, и значение параметра "all" равно ""{{:amount trigger=true}}""

Теперь я добавил дополнительную привязку, как показано ниже.

<script id="personTmpl" type="text/x-jsrender">
    <input data-link="value{:amount} trigger=true disabled{:isSameAmountForAll}" /> <br/>
</script>

<div id="placeholder" ></div>

V2: http://jsfiddle.net/michaelsync/tmwyhc7n/2/

затем я получил два попадания, потому что я связал "amount" и "isSameAmountForAll". Вы видите, что "trigger=true" отсутствует при разборе.

Итак, я переместил "trigger=true" внутрь суммы.

<script id="personTmpl" type="text/x-jsrender">
    <input data-link="value{:amount trigger=true}  disabled{:isSameAmountForAll}" /> <br/>
</script>

<div id="placeholder" ></div>

V3: http://jsfiddle.net/michaelsync/tmwyhc7n/3/

Обновлено № 2:

Разбор кажется правильным, но ObserverAll не работает..

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

// http://stackru.com/questions/25721180/summary-value-calculation-with-jsviews

var myTemplate = $.templates("#personTmpl");

var people = [
  {
    name: "Adriana",
    amount:  10,
    isSameAmountForAll: false      
  }
];

myTemplate.link("#placeholder", people);

$.observable(people).observeAll(function() {
    console.log('weird stuff');
});

V4: http://jsfiddle.net/michaelsync/tmwyhc7n/4/

1 ответ

Решение

Тебе нужно

<input data-link="{:amount trigger=true:}  disabled{:isSameAmountForAll}" />

http://www.jsviews.com/

Чтобы иметь несколько привязок, каждая привязка должна иметь полный синтаксис (с {...}). Для двусторонней привязки необходимо использовать цель (атрибут) привязки по умолчанию - поэтому не указывайте целевой атрибут:

{:amount trigger=true:},

Для односторонних привязок вы можете указать другие цели, такие как disabled:

disabled{:isSameAmountForAll},

Другие вопросы по тегам