2012-06-04 36 views
4

我有一个元素加载到我的项目中的问题Observable-Array - 带有事件。Knockout.js:将元素添加到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")) 
    }; 
})(); 

fiddle

为什么叫的addItem功能,甚至不需要点击按钮?是因为函数末尾的()吗?

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

我该怎么做才能让这个事件发生? 或者是我的问题在别的地方?

回答

3

使用

return { 
    Items: items, 
    clickSave: addItem 
}; 
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() 
      ) 
     ); 
    } 
}; 
0

,如果你想在新的项目总是被创建的同一这应该工作。

return { 
    Items: items, 
    clickSave: addItem.bind(null, new Customer(1, "Tfsd", "Tfsd")) 
};