1

我有一个包含我试图绑定到我的视图模型的 koGrid 的 Durandal 小部件(热毛巾模板)。

我对这些技术很陌生,包括异步延迟和承诺,所以请原谅我对这些问题的无知!

视图模型从 datacontext 类中获取数据,该类仅返回 Breeze 实体管理器查询的结果(返回 Q 承诺):

 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,我的错......但无论如何你都可以尝试,这正是我在尝试使 KendoGrid 工作时遇到的错误,所以你永远不会知道!试试看,不花钱:)

=====

您使用的是哪个版本的 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 回答