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');
});
1 ответ
Тебе нужно
<input data-link="{:amount trigger=true:} disabled{:isSameAmountForAll}" />
Чтобы иметь несколько привязок, каждая привязка должна иметь полный синтаксис (с {...}
). Для двусторонней привязки необходимо использовать цель (атрибут) привязки по умолчанию - поэтому не указывайте целевой атрибут:
{:amount trigger=true:}
,
Для односторонних привязок вы можете указать другие цели, такие как disabled
:
disabled{:isSameAmountForAll}
,