4

ノックアウト 3.2 でカスタム コンポーネントを進めようとしています。事前定義されたパラメーターを使用している場合、すべてがうまく機能します。たとえば、これはjsFiddleです。

しかし、ビューモデルからパラメーターを渡すと (ここで方法を読みました)、何も取得できません: jsFiddle。私は何を間違っていますか?

ここに私のjsコードがあります:

ko.components.register('pagination', {
    viewModel: function (params) {
        var self = this;
        this.page = ko.observable(params.page);
        this.max = ko.observable(params.max);

        this.list = ko.pureComputed(function () {
            var a = self.page(),
                list = [],
                min = a - 2 < 1 ? 1 : a - 2,
                max = a + 2 > self.max() ? self.max() : a + 2;

            for (var i = min; i <= max; i++) {
                list.push(i);
            }
            return ko.observableArray(list);
        });

        this.callback = function (i) {
            console.log(i);
            self.page(i);
        };
    },
    template: {
        element: 'pagination-tpl'
    }
});

function Vm(){
    this.page = ko.observable(2);
    this.max = ko.observable(6);
}
var vm = new Vm();

ko.applyBindings(vm, document.getElementById('koBinding_somePage'));
4

1 に答える 1

7

リンクされた記事では、パラメーターがコンポーネントセクションにどのように渡されるかについて、この動作について説明しています。

パラメーターが依存関係自体を作成する (オブザーバブルまたは計算された値にアクセスする) 場合、コンポーネントは値を返す計算されたを受け取ります

したがって、あなたの場合、params.pageと にparams.maxは、値ではなく、計算された観測可能なプロパティが含まれています。

したがって、それらをローカル フィールドに割り当てるだけです。

viewModel: function (params) {
       var self = this;
       this.page = params.page;
       this.max = params.max;
       //...
}

JSFiddleのデモ。

于 2014-09-03T08:05:56.813 に答える