我已经阅读了有关函数表达式与声明、回调、提升的分配,并且我对其中的大部分内容有了大致的了解,但我想由于下面的代码,我不能完全掌握这个概念,让我发布代码然后问真正的问题。
var url = "beverages.txt";
var GridModel = function () {
this.items = ko.observableArray();
var me = this;
$.ajax({
datatype: 'json',
url: "beverages.txt"
}).done(function (data) {
debugger;
var jsonData = $.parseJSON(data);
me.items(jsonData);
});
};
var model = new GridModel();
// prepare the data
var source =
{
datatype: "observablearray",
datafields: [
{ name: 'name' },
{ name: 'type' },
{ name: 'calories', type: 'int' },
{ name: 'totalfat' },
{ name: 'protein' },
],
id: 'id',
localdata: model.items
};
var dataAdapter = new $.jqx.dataAdapter(source);
$("#grid").jqxGrid(
{
width: 670,
source: dataAdapter,
theme: 'classic',
columns: [
{ text: 'Name', datafield: 'name', width: 250 },
{ text: 'Beverage Type', datafield: 'type', width: 250 },
{ text: 'Calories', datafield: 'calories', width: 180 },
{ text: 'Total Fat', datafield: 'totalfat', width: 120 },
{ text: 'Protein', datafield: 'protein', minwidth: 120 }
]
});
ko.applyBindings(model);
});
好的,所以这段代码工作正常,它通过 var model = new GridModel(); 调用 ajax 请求。问题是,如果我添加一个调试器;var model = new GridModel(); 之后的语句 它失败。此外,ajax 请求中的调试器语句不会触发,但是如果我在 var model = new GridModel(); 之后删除调试器语句 然后 ajax 触发,我可以调试请求。为什么附加调试器会失败,是因为 var GridModel 是一个表达式。
基本上我想做的是创建一个我可以调用的声明函数,当ajax请求完成时我返回observableArray我。如果我改变这样的功能
function GridModel (param1,param2) {
this.items = ko.observableArray();
var me = this;
$.ajax({
datatype: 'json',
url: "beverages.txt"
}).done(function (data) {
debugger;
var jsonData = $.parseJSON(data);
me.items(jsonData);
});
return me
};
然后我希望能够像这样调用该函数 var myitems = GridModel(param1,param2) 期望 myitems 现在将保存 ajax 请求的结果。我只是不完全理解代码执行流程是如何工作的,如果有人能解释为什么底部功能不起作用以及如何让它工作,我将不胜感激。
谢谢,丹