我应该在viewModel上的另一个observable中包含具有observable属性的类实例吗?

时间:2016-04-12 19:56:04

标签: knockout.js

我有一个具有可观察属性的可构造对象

function Item() { this.prop = ko.observable() }

我的视图模型创建了Item

的实例
var instance = ko.observable(new Item())

我不应该将实例包装在ViewModel上的observable中吗?如果我不包装" item"在可观察的情况下,该组件根本不起作用。

var instance = new Item()

我将该实例作为参数传递给组件。

<component params="item: item"></component>  

我无法弄清楚如何从组件模板绑定到实例的可观察属性。当badge.disabled observable发生更改时,禁用的类不会更改。

template: '<img class="ui image" src="http://fakeimg.pl/300/" data-bind="css: { disabled: item().disabled }" >'

这是完整的例子。

https://gist.github.com/guyjacks/2b4c18fe7f4f7bf9b34059e9019d0918

非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

您只需要修改一些型号代码

 ko.components.register('badge-button', {
            viewModel: function(params) {
                var self = this;

                 self.badge = params.badge();
                 self.open = function() {

                    self.badge.toggleHas();
                    self.badge.toggleActive();
                }
            },

            template: 
                '<img class="ui image" src="http://fakeimg.pl/300/" data-bind="click: open, css: { disabled: badge.disabled }" >'
        });

工作示例:http://jsfiddle.net/GSvnh/5137/