0

data-link で追加の属性をバインドすると、デフォルトのバインドと trigger=true が機能しなくなりました。エラーや明らかなものはありません。しかし、うまくいきません。

デフォルトのバインディング

この例 ( http://jsfiddle.net/BorisMoore/wch601L9/ ) では、属性 (例: value{:amount} ) を明示的に設定せずに "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/ )、合計が更新されないことがわかります。

これを回避する方法がわかりません。これも既知の問題ですか?

この質問が明確でない場合は、お気軽にお知らせください。ありがとう!

注: なぜ 2 つの属性をバインドしたいのか疑問に思われている方のために、これは私がテストしているサンプルです。http://jsfiddle.net/michaelsync/078cazh8/2/

更新#1:

現在、JsViews ソース コードをデバッグしています。コード サンプルをデバッグ用に変更しました。

こちらがv1です。http://jsfiddle.net/michaelsync/tmwyhc7n/1/

バインディングが 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」をバインドしたため、2 つのヒットがありました。解析で「trigger=true」が欠落していることがわかります。

だから..「trigger = true」を amount 内に移動しました。

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

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

4

1 に答える 1