簡單的要求 - 在我的視圖模型中需要填充在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