1

プロジェクトでKendo SchedulerにKnockout-kendo.js バインディングを使用しています。

スケジューラでは、水平グループ化も使用しています。だから、ここで私は使用しましたDataSource and well as Resources with group.

以下のように変数を宣言しました。

monitorData = ko.observableArray(),

schedulerData = ko.observableArray(),

私のアクティベート方法:

activate = function (args) {
            getMonitorData ();
            getschedulerData (08, 09, 2014);
 },

Service 呼び出しが完了する前に、 activate メソッドが返されます。ここで Observable 配列が機能するはずです。しかし、実際にはスケジューラにデータを割り当てていません。観測可能な配列にデータがありますが。

私のスケジューラコード:

        <div class="scheduler">
            <div id="scheduler" data-bind="kendoScheduler:
            {                    
                date: new Date(),
                startTime: new Date('2014/6/13 12:15 AM'),
                endTime: new Date('2014/6/13 11:54 PM'),
                height: containerHeight,
                views: [{ type: 'day', selected: true, majorTick: 15 }], //'week', //'month', //'Agenda'
                editable: false,
                useKOTemplates: true,
                eventTemplate: $('#event-template').html(), 
                allDaySlot: false,
                timezone: 'Etc/UTC',
                footer: { command: false },
                dataSource: schedulerData(),
                group: { resources: ['Monitors'] },
                resources: [{ field: 'scheduleId', name: 'Monitors', dataSource: monitorData (), title: 'Monitors' }],
                dataBound: function () { $('.k-floatwrap ul li.k-nav-current').hide(); }
            }">
            </div>
        </div>

初期化時にデータを変数にハードコーディングすると、機能します。したがって、時間間隔もありませんので、データはスケジューラに割り当てられます。

以下のように:

processMonitors = processMonitorMapper(monitors), // Functio without service call - returns hard code data

schedulerData = schedulerDataMapper(rawData), // // Functio without service call - returns hard code data

初期データの初期化後に割り当てられた場合、観測可能な配列データが剣道スケジューラによって理解されないことがわかりました。だから私は試してみましたko.toJS。これも私には役に立ちません。

この種の問題を回避するには。ko.bindhandlersforスケジューラーを試しました。

コード:

ko.bindingHandlers.kendoScheduler = {
            init: function (element) {
                var sch = $(element).data("kendoScheduler");
                console.log("Scheduler Initiated");
            },
            update: function (element, valueAccessor) {
                var value = ko.utils.unwrapObservable(valueAccessor());
                //var scheduler = $(element).data("kendoScheduler");
                //if (scheduler != null) {
                //if (value.dataSource != null && value.dataSource.length > 0 && value.resources[0] != null && value.resources[0].dataSource.length > 0) {
                //    $(element).kendoScheduler({ dataSource: value.dataSource, resources: value.resources });
                //}

                var dataSource = new kendo.data.SchedulerDataSource({
                    data: value
                });
                $(element).data("kendoScheduler").setDataSource(dataSource)
                //}
                console.log("Scheduler Updated");
            }
        };

しかし、問題は上記のコードも機能しないことです。上記の問題に対処するのを手伝ってください。

追加情報:また、スケジューラのデータ ソースとリソースを毎日変更する必要があります。日程は剣道カレンダーにて決定。賢明な選択のために毎日サービスを呼び出す必要があります。そのため、新しいデータソースを割り当てる必要がありますKendo Scheduler.

剣道スケジューラのデータ ソースとリソースを動的に割り当てる方法を教えてください。観測可能な配列に割り当てると、上記のように機能しない/割り当てられません。

kendoScheduler Update / Init の ko.bindingHandlers をどのように記述すればよいですか?

4

1 に答える 1

1

書く必要はありませんKo BindHandlers

メソッドからデータソースを割り当てましたgetschedulerData()。また、最初にロードしていたときの呼び出しはasync: false. 今、私は電話をかけsyncました。だから、そのactivate method will not be returned until otherwise the call get finished

以下は、DataSource を置き換えるために使用したコードです。

                var scheduler = $('#scheduler').data('kendoScheduler');
                if (scheduler != null) {
                    var dataSource = new kendo.data.SchedulerDataSource({
                        data: schedulerData()
                    });
                    scheduler.setDataSource(dataSource);
                }

しかし、なぜそれがうまくいかなかったのかわかりませんobservable array:(

参照 :剣道スケジューラ - ドロップダウン メニューをクリックして確認してください -構成、フィールド、メソッド、イベント:)

于 2014-09-15T13:48:41.530 に答える