1

リストを使用するWinRT/javaScriptアプリがあります。テストとして、私は次のコードを持っています:

var testList = new WinJS.Binding.List();
var item = {
    key: "mykey",
    value: "hello",
    value2: "world"
};

testList.push(item);

var foundItem = testList.getItemFromKey("mykey");

提供されたキーを使用してアイテムを見つけることができると期待しています。ただし、foundItem常に未定義で返されます。リストの設定と使用で間違っていることがありますか?

また、デバッグ時にリストを調べると、プッシュしたアイテムのキーが「mykey」ではなく「1」であることがわかります。

4

1 に答える 1

1

プッシュしているのはリスト内のオブジェクトの値であり、キーは増分整数値として内部的に割り当てられます。base.jsプロジェクトのJavaScript1.0リファレンス用のWindowsライブラリを開いてみると、次の実装が表示されpushます。

の呼び出しに注意してくださいthis._assignKey()。この値は、oniteminsertedハンドラーで返されます

push: function (value) {
    /// <signature helpKeyword="WinJS.Binding.List.push">
    /// <summary locid="WinJS.Binding.List.push">
    /// Appends new element(s) to a list, and returns the new length of the list.
    /// </summary>
    /// <param name="value" type="Object" parameterArray="true" locid="WinJS.Binding.List.push_p:value">The element to insert at the end of the list.</param>
    /// <returns type="Number" integer="true" locid="WinJS.Binding.List.push_returnValue">The new length of the list.</returns>
    /// </signature>
    this._initializeKeys();
    var length = arguments.length;
    for (var i = 0; i < length; i++) {
        var item = arguments[i];
        if (this._binding) {
            item = WinJS.Binding.as(item);
        }
        var key = this._assignKey();
        this._keys.push(key);
        if (this._data) {
            this._modifyingData++;
            try {
                this._data.push(arguments[i])
            } finally {
                this._modifyingData--;
            }
        }
        this._keyMap[key] = { handle: key, key: key, data: item };
        this._notifyItemInserted(key, this._keys.length - 1, item);
    }
    return this.length;
},

したがって、コードに以下を追加すると、後で使用できる値が得られます(プッシュした「キー」に関連付けると仮定します)。

testList.oniteminserted = function (e) {
    var newKey = e.detail.key;
};
于 2013-03-03T16:37:44.120 に答える