1

コードを参照してください(ASP MVC 3でknockout.jsを使用):

self.tags = ko.utils.arrayMap(@Html.Raw(new JavaScriptSerializer().Serialize(Model.Tags)), function(tag) {
                return {
                    label: tag.Name,
                    value: tag.id
                };
        });

self.addTag = function(event, ui){
            $(event.target).val("");

            var tag = ui.item.label;
            var id = ui.item.value;

            self.selectedTags.push("id: " + id + ", Name: " + tag);
            //Delete selected tag here from list
            return false;
        }

問題は、どうすればタグから削除できますか?(remove()を使用しようとすると、エラーが発生します。しかし、pop()を試してみると、成功します)

4

3 に答える 3

3

タグ配列は通常の配列であり、監視可能な配列ではありません。removeメソッドはありません。

Knockoutには通常の配列のヘルパーがあります

ko.utils.arrayRemoveItem(array, itemToRemove)

または、スプライスを使用できます(実際にはko.utils.arrayRemoveItemはスプライスを使用します)

于 2012-04-18T12:57:11.043 に答える
1

通常、スプライスを使用してjavascript配列からアイテムを削除できます。

最後に挿入された値のみが削除されるため、ポップは機能しません。

var a = [1,2,3] a.splice(1,1); #位置1の1つの要素を削除=> [1,3]

必要に応じて、これをノックアウトで使用できます。

ノックアウトには、id 1を持つすべての要素を返すarray.remove(function(a){return a.id === 1;})のようなAPIもあります。

編集:例として、このJsFiddlehttp : //jsfiddle.net/Ng39n/を見ることができます。

于 2012-04-18T11:39:08.727 に答える
1

次のように、ビューモデルに関数removeTagを追加できます。

self.removeTag = function(tag) { self.tags.remove(tag); })
于 2012-04-18T21:48:01.060 に答える