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

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

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

В этом примере (http://jsfiddle.net/BorisMoore/wch601L9/) "сумма" свойство привязано без явной установки атрибута (например, 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/) моя версия примера Бориса Мура. и я внес изменения, чтобы показать этот сценарий.

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

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

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

триггер=true

Если вы введете несколько чисел в текстовое поле (пример примера 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)

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

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

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

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

Версия 2: http://jsfiddle.net/michaelsync/tmwyhc7n/2/

затем я получил два попадания, потому что я связываю «количество» и «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>

Версия 3: http://jsfiddle.net/michaelsync/tmwyhc7n/3/

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

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

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

// http://stackoverflow.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');
});

Версия 4: http://jsfiddle.net/michaelsync/tmwyhc7n/4/


person Michael Sync    schedule 25.09.2014    source источник


Ответы (1)


Тебе нужно

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

http://www.jsviews.com/#linked-elem-syntax

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

{:amount trigger=true:}.

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

disabled{:isSameAmountForAll}.

person BorisMoore    schedule 25.09.2014