4

我在将元素加载到我的项目 Observable-Array 时遇到问题 - 有一个事件。

ViewModel = (function () {
    var 
        items = ko.observableArray([]),

        removeItems = function (element) {
            items.remove(element);
        },
        saveAll = function () {
            return ko.toJS(items);
        },
        addItem = function (element) {
            items.push(element);
            return false;  // no Page-Reload after button-klick
        };

    return {
        Items: items,
        // i call addItem with a dummy object (for testing)
        clickSave: addItem(new Customer(1, "Tfsd", "Tfsd"))
    };
})();

小提琴

为什么调用 addItem 函数,甚至没有点击按钮?是因为函数末尾的 () 吗?

    addItem = function (element) {
        items.push(element);
        return false;  // no Page-Reload after button-click
    };

我能做些什么来只为这个活动做这个?还是我的问题在其他地方?

4

3 回答 3

3

采用

return {
    Items: items,
    clickSave: addItem
};
于 2012-06-06T11:10:34.010 回答
0

为什么调用 addItem 函数,甚至没有点击按钮?是因为函数末尾的 () 吗?

是的。

改为这样做:

return {
    Items: items,
    clickSave: function() {
        addItem(
            new Customer( 
                items().length + 1, // or whatever you use to determine new IDs
                $("#inputVorname").val(),
                $("#inputNachname").val()
            )
        );
    }
};
于 2012-06-04T13:47:48.687 回答
0

如果您希望创建的新项目始终相同,这应该可以工作。

return {
    Items: items,
    clickSave: addItem.bind(null, new Customer(1, "Tfsd", "Tfsd"))
};
于 2013-07-02T20:58:55.577 回答