2013-04-22 38 views
0

我有兩個視圖有自己的視圖模型。其中一個包含一個網格,另一個包含一個表單。我同時動態加載其中兩個。使用kendo ui框架的MVVM使用

這是我的看法conatining網格視圖模型:

$(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的data屬性中。我叫viewModelOrder的updateInstruments功能,但在螢火蟲我收到以下錯誤:

的ReferenceError:viewModelOrder沒有定義

viewModelOrder.updateInstruments();

如何防止此錯誤?

回答

1
  1. 問題的根源在於您的viewModelOrder與網格文檔的準備範圍不同。
  2. 您不應該從多個同時加載的動態加載視圖中引用函數/對象。如果一個人比另一個負重得多呢?或根本不加載?

我能想到的最簡單的解決方案: 1.同步視圖。在網格後加載表單。 2.網格的文檔的內容移動準備一個

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

,並使用該函數形式的文件準備

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

編輯在:語法。