将params传递给Knockout中的子组件

我有一个模板:

 
  • 还有一些具有一些逻辑的组件:

     function Item(title) { this.title = title } ko.components.register('item-list', { viewModel: function(params) { this.items = ko.observableArray(params.items) this.newItem = ko.observable('') this.addItem = function() { this.items.push(new Item(this.newItem())) } this.removeItem = function(a) { this.items.remove(a.$data) }.bind(this) }, template: {element: 'item-list'} }) ko.components.register('item', { viewModel: function(params) { $.extend(this, params) }, template: {element: 'item'} }) function ViewModel() { this.items = [ new Item('One'), new Item('Two'), new Item('Three') ] } var vm = new ViewModel() ko.applyBindings(vm, document.body) 

    有没有办法直接在foreach传递项目,所以我不必这样做?

     

    但更像是:

      

    我是Knockout的新手。 我知道我可以将一个对象传递给视图模型并对该对象进行操作,所以代替this.title我必须这样做this.object.title或者this.$data.title我还是要传递$element$parent手动。

    有没有其他方法可以自动化我错过了?

    您可以按如下方式传递$context

      

    然后在组件代码中:

     viewModel: function(params) { var ctx = params.context; var itemData = ctx.$data; $.extend(this, itemData) }, 

    但是,您似乎根本没有使用上下文,只是通过传递的item数据来扩展this 。 所以,以下也会这样做:

      viewModel: function(params) { $.extend(this, params.item) }, 

    见小提琴