简单的要求 - 在我的视图模型中需要填充在datacontext模块中的淘汰赛观察数组。 2个不同的模块是问题的核心。传递淘汰赛observables作为参数
基本问题是,如果knockout observable是一个函数,那么如何将它作为参数传递,以及这个变量的范围是什么。它是全球性的,因为它是可观察的吗?我使用的模式直接从John Papa的SPA Jumpstart课程中解脱出来,但似乎并不适用于我,除非我在某处丢失了括号或返回语句。我尝试了许多不同的组合。
使用JPs热毛巾mvc模板,但不参考我的查询。
这里是视图模型代码
define(['dataContext'], function (datacontext) {
var summary = ko.observableArray();
var initialise = false;
var prodModel= {
activate: activate,
title: 'Home View',
summary:summary
};
return prodModel;
//#region Internal Methods
function activate() {
if (!initialise)
{
initialise = true;
return getSummary();
}
return;
}
function getSummary() {
// Go to the context and populate the observable array
return datacontext.getProductionSummary(summary);
};
//#endregion
});
以下是DataContext的模块。尝试在getProductionSummary方法中将javascript数组分配给knockout observable数组时发生该错误。
值得一提的是,我也试图使用pushAll实用程序功能。
填充observable数组的唯一东西是直接将其推入,但即使我这样做,我没有在调用viewmodel代码中的值,因为我期望与普通变量。
define(['config','services/logger'],
function (config,logger) {
var getProductionSummary = function (summaryObservableArray) {
//Call Web API
var query = breeze.EntityQuery.from('getSummary');
return manager.executeQuery(query).then(querySucceeded).fail(queryFailed);
//Yay got the data.. lets play
function querySucceeded(data) {
var summary = [];
for (var i = 0; i < data.results.length; i++) {
summary.push(data.results[i]);
}
return summaryObservableArray(summary);
}
};
var datacontext = { getProductionSummary: getProductionSummary };
return datacontext;
// #region Internal functions
var manager = createBreezeManager();
function createBreezeManager() {
var mgr= new breeze.EntityManager(config.dataEndPoints);
return mgr;
};
function queryFailed(error) {
logger.log(error.message, null, 'dataContext', true);
}
//#endregion
});
这是在其中引发错误的看法位
<!--ko foreach:summary-->
<tr>
<td><span data-bind="text: summary().Count"></span></td>
<td><span data-bind="text: summary().Percentage"></span></td>
</tr>
<!--/ko-->
的错误是
Unable to parse bindings.↵Message: ReferenceError: summary is not defined;↵Bindings value: text: summary().Count
KO可观察变量(或属性)的范围与* any *变量(或属性)的范围相同。另外,不要忘记解释“错误”是什么。 – user2246674 2013-04-28 08:29:33
是的,什么是错误?但是我也会说,返回'summaryObservableArray(summary)'是没有意义的。这是因为一个可观察的简单的''返回这个';'当写入时,在这种情况下将是'window'对象。 – 2013-04-28 10:32:29
这行'var manager = createBreezeManager();'没有执行,'manager.executeQuery(query)'应该抛出错误。 – xdenser 2013-04-28 11:34:12