単純な要件 - データ コンテキスト モジュールに入力する必要があるビュー モデルのノックアウト オブザーバブル配列。2 つの異なるモジュールが問題の核心です。
基本的な問題は、ノックアウト オブザーバブルが関数である場合、それをパラメーターとして渡す方法と、そのような変数のスコープは何かということです。私が使用しているパターンは、John Papa の SPA ジャンプスタート コースから直接取り上げたものですが、ブラケットまたは return ステートメントをどこかで見逃していない限り、うまくいかないようです。いろいろな組み合わせを試しました。
JPのホットタオル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 配列をノックアウト オブザーバブル配列に割り当てようとすると、エラーが発生します。
pushAll ユーティリティ関数も使用しようとしたことは言及する価値があります。
観測可能な配列にデータを入力する唯一のことは、それに直接プッシュすることですが、それを行っても、通常の変数で期待するように、呼び出し元のビューモデル コードに値がありません。
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