0

渡されたものに基づいてモジュールを作成するハンドラーを作成しようとしています。ここに私が持っているものがあります:

ko.bindingHandlers.CreateModule = {
        init: function (element, valueAccessor, allBindingAccessor, viewModel, bindingContext) {
            var value = ko.utils.unwrapObservable(valueAccessor()),
                childContext;

            var module = $(element).kendoCustom();
            //var module = $(element)['kendo' + value]();

            childContext = bindingContext.createChildContext(module.data('kendoCustom').options);

            ko.applyBindingsToDescendants(childContext, element);
            return { controlsDescendantBindings: true };
        }
    };

var Custom = Widget.extend({
            init: function (element, options) {
                Widget.fn.init.call(this, element, options);
                this._create();
            },
            options: {
                name: 'Custom',
                isSimple: true,
                venues: ko.observableArray(),
                test: ko.computed(function () {
                    // Heres on of the main issues
                    return this.venues().length > 0 ? this.venues() : {};
                }),
                kendoGrid: {
                    data: this.test,
                    sortable: true,
                    scrollable: true,
                    columns: ['Name', 'Time','Event'],
                    height: '100%'
                },
                update: function () {  ...  }
            },
            _templates: {
                main: '<div style="height:100%"></div>',
                simple: '<div data-bind="kendoGrid: kendoGrid"></div>'
            },
            _create: function () {
                var that = this;
                that.options.update();
                that.element.append(that._templates.simple);
            }
        });

        ui.plugin(Custom);

ウィジェット内のプロパティにアクセスする方法がわかりません。たとえば、'test' 関数内では、'this' は常に Window を参照していますが、会場にアクセスできるようにする必要があります。内部からウィジェット内の他のプロパティにアクセスするにはどうすればよいですか?

4

2 に答える 2

0

ko.computedthisこれは、計算されたオブザーバブルを実行するときに必要な値です。

_create: function () {
    this.options.kendoGrid.data = ko.computed(function () {
        return this.venues().length > 0 ? this.venues() : {};
    }, this.options);
    ...
},
于 2012-11-29T20:07:14.543 に答える
0

これは適切な答えではないかもしれませんが、うまくいっているようです:

var Custom = Widget.extend({
        init: function (element, options) {
            Widget.fn.init.call(this, element, options);
            this._create();
        },
        options: {
            name: 'Custom',
            isSimple: true,
            venues: ko.observableArray(),
            kendoGrid: {
                data: this.test,
                sortable: true,
                scrollable: true,
                columns: ['Name', 'Time','Event'],
                height: '100%'
            }
        },
        _templates: {
            main: '<div style="height:100%"></div>',
            simple: '<div data-bind="kendoGrid: kendoGrid"></div>'
        },
        _create: function () {
            var that = this;
            that.options.kendoGrid.data = that.test();
            that.update();
            that.element.append(that._templates.simple);
        },
        test: function () {
                var that = this;
                return ko.computed(function () {
                    return that.options.venues().length > 0 ? that.options.venues() : {};
                });
            },
        update: function () {  ...  }
        });
于 2012-11-28T22:35:40.640 に答える