2

KO コンポーネントは、パラメータとして渡すと、オブザーバブルの参照を受け取ります。コンポーネントがそれを参照として受け取ると、このオブザーバブルに書き込むことができ、ビューモデルに反映されます。しかし、ko-es5 プラグイン (非常に素晴らしい) を使用すると、KO コンポーネントは、observable への参照を受け取る代わりに、ある種の computeObservable を受け取り、それに書き込むことができません。これは予期しない動作ですか?

ノックアウトだけでやってみる

http://jsfiddle.net/kapuca/k0fw8w18/

<voting params="votes: votes"></voting>

<template id="voting-tpl">
    <button data-bind="click: increment ">Up</button>
    <div data-bind="text: votes"></div>
</template>

ko.components.register('voting', {
    viewModel: function(params) {
        var self        = this;
        self.votes      = params.votes;

        self.increment  = function(){
            self.votes( self.votes() + 1 );
        };

        return self;
    },
    template: { element: 'voting-tpl' }
});

function Vm(){
    this.votes = ko.observable(5);
    return this;
}

ko.applyBindings(new Vm() );

ノックアウト + ko-es5 プラグインを使って試す

http://jsfiddle.net/kapuca/jwea6zaL/

<voting params="votes: votes"></voting>

<template id="voting-tpl">
    <button data-bind="click: increment ">Up</button>
    <div data-bind="text: votes"></div>
</template>

ko.components.register('voting', {
    viewModel: function(params) {
        var self        = this;
        self.votes      = params.votes;

        self.increment  = function(){
            self.votes( self.votes + 1 );
        };

        return ko.track(self);
    },
    template: { element: 'voting-tpl' }
});

function Vm(){
    this.votes = 5;
    return ko.track(this);
}

ko.applyBindings(new Vm() );
4

1 に答える 1