1

ビュー モデルにバインドしようとしている koGrid を含むデュランダル ウィジェット (ホット タオル テンプレート) があります。

私は非同期遅延やプロミスを含むこれらのテクノロジーにかなり慣れていないので、そのような問題について無知であることを許してください!

ビュー モデルは、Breeze エンティティ マネージャー クエリ (Q promise を返す) の結果を返すだけの datacontext クラスからデータを取得します。

 var manager = new breeze.EntityManager({ dataService: dataService });
 return manager.executeQuery(query)
            .then(function (data) {
                return data.results;
            })
            .fail(queryFailed);

私のウィジェットのコンストラクターには、次のものがあります。

var vm = function(element, settings) {
    var self = this;
    this.settings = settings;
    this.myData = ko.observableArray([]);

    this.viewAttached = viewAttached;       

    queryDataContext.executeQuery('Customer', 'good').then(function(ents) {

    var Item = function(id, name, maincontacttelephone) {
        this.ID = id;
        this.Name = name;
        this.MainContactTelephone = maincontacttelephone;
    };

    for (var i = 0; i < ents.length; i++) {
        self.myData.push(new Item(ents[i].ID(), ents[i].Name(), ents[i].MainContactTelephone()));
    }

    self.gridOptions = { data: self.myData };

    });
};
return vm;

function viewAttached(view) {
    $(window).trigger('resize');
    return true;
}

データは「ents」変数に返され、observableArray myData にプッシュされます。これは機能するはずですが、koGrid ファイルでエラーが発生します。

 /***********************************************
* FILE: ..\src\bindingHandlers\ko-grid.js
***********************************************/
ko.bindingHandlers['koGrid'] = (function () {
    return {
        'init': function (element, valueAccessor, allBindingsAccessor, viewModel,      bindingContext) {
            var options = valueAccessor();

valueAccessor() が定義されていないため、グリッドが機能しません。

ここで、リモート クエリを実行するコードを次のように変更すると:

$.when(queryDataContext.executeQuery('Customer', 'good')).then(function(ents) {

(jQueryを使用すると約束されます)、何らかの理由で機能します。ただし、ents 変数のタイプは「makePromise」であり、解決方法がわかりません。

私の理解では、とにかく Breeze が返すのは Q の約束です。

Q.when(queryDataContext.executeQuery('Customer', 'good')).then(function(ents) {

ents にはデータが含まれますが、koGrid の未定義の問題に戻ります。

どんな助けでも大歓迎です!

4

1 に答える 1

4

編集 :おっと、Kendo Grid について話していなかったことを確認してください、私の悪い.しかし、とにかくそれを試すことができます。試してみてください。費用はかかりません:)

=====

どのバージョンの JQuery を使用していますか? Kendo UI コントロールは、公式にのみ JQuery 1.7.2 と互換性があります。そのため、JQuery の最新のブランチである 1.9 を使用している場合、JQuery 1.9.x で廃止されたいくつかの関数に依存しているため、機能しなくなりました。

Kendo UI Grid コントロールを使用しているときに数週間前に同じ問題が発生しましたが、解決策があります。

JQuery 標準プラグインの横に JQuery.Migrate プラグインを含める必要があります。JQuery.Migrate は非推奨の機能を復元して、最新バージョンの JQuery では機能しないものを使用できるようにします。

ここで JQuery.Migrate の最新バージョンを入手できます: http://blog.jquery.com/2013/02/16/jquery-migrate-1-1-1-released/

それがあなたの問題を解決することを願っています:)

于 2013-04-05T17:43:21.727 に答える