我有一个包含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;
}
数据回归&#34; ents&#34;变量,被推入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变量的类型是&#39; makePromise&#39;我不知道如何解决。
根据我的理解,它是Breeze返回的Q承诺,如果我使用
Q.when(queryDataContext.executeQuery(&#39; Customer&#39;,&#39; good&#39;))。then(function(ents){
然后ents包含数据,但我又回到了koGrid未定义的问题。
非常感谢任何帮助!
答案 0 :(得分: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/
希望它能解决你的问题:)