1

IDとステータスを含むオブジェクトにバインドされた次のhtmlがあります。ステータス値を特定の色に変換したい (したがって、コンバーター関数 convertStatus)。コンバーターが最初のバインディングで動作していることを確認できますが、バインディング リストのステータスを変更しても、UI の更新は表示されず、convertStatus がその後呼び出されることもありません。私の他の問題は、最初のスパンの id プロパティをバインドしようとしているが、期待どおりに機能していないようです (おそらく、バインディングを介してこの値を設定することはできません...)

HTML:

<span data-win-bind="id: id">person</span>
<span data-win-bind="textContent: status converter.convertStatus"></span>

Javascript (ステータス値を変更するために使用しようとしました):

// people === WinJS.Binding.List
// updateStatus は、システムでステータスが変更された結果として呼び出される関数です

function updateStatus(data) {
    persons.forEach(function(value, index, array) {
        if(value.id === data.id) {
            value.status = data.status;
            persons.notifyMutated(index);
        }
    }, this);
}

コンバーターを使用していない値に対して notifyMutated(index) が機能するのを見てきました。

github プロジェクトによる更新

サンプル用のパブリック リポジトリ (動作していません) - これは、一連の既定のデータを含むリストビューと、アイテムがクリックされたときに実行される関数を備えた、非常に基本的なアプリです。この関数は、アイテムのバインドされたフィールドの 1 つをランダム化し、リストで notifyMutated(...) を呼び出して、ビジュアルの更新をトリガーしようとします。WinJS.Binding.List({ binding: true }); を定義しても リストビュー要素でリロードちらつきを生成するnotifyReload()を介して強制しない限り、更新は表示されません。

4

4 に答える 4

2

2 つの質問に答えるには:

1) バインディングで ID を設定できないのはなぜですか?

これは意図的に防止されます。WinJS バインディング システムは、ID を使用して、バインディング先の要素を追跡します (ダングリング バインディングによる DOM 要素のリークを避けるため)。そのため、バインドされたテンプレートの ID を制御できる必要があります。

2) コンバーターが複数回起動しないのはなぜですか?

Binding.List は、リストの内容の変更 (項目の追加、削除、または移動) についてリストビューに通知しますが、内容の変更についてリストビューに通知するのは個々の項目の責任です。

バインド可能なデータ オブジェクトが必要です。いくつかのオプションがあります。

  • WinJS.Binding.asコレクションに要素を追加するときに要素を呼び出す
  • Binding.List でバインディング モードをオンにする

後者はおそらく簡単です。基本的に、Binding.List を作成するときは、次のようにします。

var list = new WinJS.Binding.List({binding: true});

そうすれば、リストはリスト内のすべてのものに対して binding.as を呼び出し、更新が開始されます。

于 2012-08-17T20:49:54.920 に答える
0

optimizeBindingReferences プロパティ

バインディングが要素の ID を自動的に設定するかどうかを決定します。Windows Library for JavaScript (WinJS) バインディングを使用するアプリでは、このプロパティを true に設定する必要があります。

WinJS.Binding.optimizeBindingReferences = true;

ソース: http://msdn.microsoft.com/en-us/library/windows/apps/jj215606.aspx

于 2014-06-12T13:27:39.030 に答える
0

idの値の設定について。<button> の name 属性の値を設定できることがわかりました。IDを設定しようとしていましたが、うまくいきませんでした。HTH

于 2014-04-10T14:14:56.103 に答える
0

次の操作を行うと、バインド後の UI が更新されることがわかりました。

var list = new WinJS.Binding.List({binding: true});
var item = WinJS.Binding.as({
    firstName: "Billy",
    lastName: "Bob"
});
list.push(item);

アプリケーションの後半で、次のようにいくつかの値を変更できます。

item.firstName = "Bobby";
item.lastName = "Joe";

...そして、UI の変更が表示されます

詳細については、MSDN のリンクを参照してください: MSDN - WinJS.Binding.as

于 2012-12-22T14:57:10.780 に答える