[Knockout.js] 如何有條件地推送可觀察數組中的項目?



Answers

謝謝RP。 這裡有一個使用你的建議來通過我的視圖模型中的對象的'id'屬性返回'name'屬性的例子。

    self.jobroles = ko.observableArray([]);

    self.jobroleName = function (id)
    {
        var match = ko.utils.arrayFirst(self.jobroles(), function (item)
        {
            return item.id() === id();  //note the ()
        });
        if (!match)
            return 'error';
        else
            return match.name;
    };

在HTML中,我有以下($ parent是由於這是在表行循環中):

<select data-bind="visible: editing, hasfocus: editing, options: $parent.jobroles, optionsText: 'name', optionsValue: 'id', value: jobroleId, optionsCaption: '-- Select --'">
                            </select>
<span data-bind="visible: !editing(), text: $parent.jobroleName(jobroleId), click: edit"></span></td>
Question

我想push一個新項目推送到observableArray ,但前提是該項目不存在。 KnockoutJS中是否有任何“查找”功能或推薦模式?

我注意到observableArray上的remove函數可以接收一個傳入條件的函數。 我幾乎想要相同的功能,但只有在傳入的條件是或者不是真時才會推送它。




我會在變化之前加上“valueWillMutate()”,在它們後面加上“valueHasMutated()”。

for (var i = 0; i < data.length; i++) {
    var needChange = false;
    var itemToAdd = data[i];
    var match = ko.utils.arrayFirst(MyArray(), function (item) {
        return (itemToAdd.Code === item.Code);
    });
    if (!match && !needChange) {
        MyArray.valueWillMutate();
        needChange = true;
    }
    if (!match) {
        MyArray.push(itemToAdd);
    }
}
if (needChange) {
    MyArray.valueHasMutated();
}



Links