0

独自のビュー モデルを持つ 2 つのビューがあります。1 つはグリッドのみを含み、もう 1 つはフォームを含みます。そのうちの 2 つを同時に動的にロードしています。

これが私のビューを含むグリッドのビューモデルです:

$(function () {

var ticker = $.connection.marketWatch;
var initializationData = null; // marketWatchData 
function init() {
    return ticker.server.getAllMarketWatchData().done(function (data) {

        initializationData = data;

        $("#marketWatchGrid").data("kendoGrid").dataSource.data(data);
    });
}

// Add client-side hub methods that the server will call
$.extend(ticker.client, {
    updateMarketWatchData: function (marketWatchData) {
        // do something...
    }
});

// Start the connection
$.connection.hub.start()
    .pipe(init)
    .done(function () {
        viewModelMarketRates.data = initializationData;

        viewModelOrder.updateInstruments();
    });
});

var viewModelMarketRates = kendo.observable({
    data: null
});

kendo.bind($("#marketWatchGrid"), viewModelMarketRates);

そして、フォームを含む私のビューのビューモデル:

$(function () {
var viewModelOrder = kendo.observable({
    instruments: viewModelMarketRates.data,
    selectedInstrument: "EURUSD",
    amount: "0.1",
    slActivate: false,
    sl: "0.0",
    tpActivate: false,
    tp: "0.0",
    buy: function () {
        //e.preventDefault();

        //alert("buy");
    },
    sell: function () {
        //e.preventDefault();

        //alert("sell");
    },
    updateInstruments: function () {
        this.set("instruments", viewModelMarketRates.data);
        this.set("selectedInstrument", "EURUSD");
    }
});

//viewModelOrder.instruments = viewModelMarketRates.data;
//alert(viewModelOrder.instruments.length);
kendo.bind($("#orderForm"), viewModelOrder);
});

ご覧のとおり、init 関数で市場レート データを取得し、それを viewModelMarketRates のデータ属性に格納しています。viewModelOrder の updateInstruments 関数を呼び出しますが、firebug では次のエラーが発生します。

ReferenceError: viewModelOrder が定義されていません

viewModelOrder.updateInstruments();

このエラーを防ぐにはどうすればよいですか?

4

1 に答える 1

1
  1. 問題の原因は、viewModelOrder がグリッドのドキュメント対応とは異なるスコープにあることです。
  2. 同時にロードされる複数の動的にロードされたビューから関数/オブジェクトを参照しないでください。一方のロードが他方より遅い場合はどうなりますか? それとも全く読み込まない?

atm で考えられる最も簡単な解決策: 1. ビューを同期します。グリッドの後にフォームをロードします。2. 準備が整ったグリッドのドキュメントのコンテンツを

function grid_ready(){
//all that ticker and connections start stuff
}

フォームのドキュメントの準備ができてその機能を使用します

$(function(){
//create view model etc,
grid_ready();
});

編集:文法。

于 2013-04-23T21:55:23.007 に答える