我最近剛剛負責創建SPA。所以,我創建了一個新項目並選擇了SPA,並發現它加載了我需要的所有文件,包括knockout.js。MVC SPA +淘汰
我是新來的knockout.js,所以我看了一些視頻,我看到了這個主意,但SPA項目似乎並沒有計算出來,因爲它不是單頁應用,因爲你有去一個新的URL登錄,註冊,授權,管理賬戶等(你明白了)。
因此,看看索引頁的代碼,我可以看到homeView的視圖模型。它看起來像這樣:
function HomeViewModel(app, dataModel) {
var self = this;
self.myHometown = ko.observable("");
Sammy(function() {
this.get('#home', function() {
// Make a call to the protected Web API by passing in a Bearer Authorization Header
$.ajax({
method: 'get',
url: app.dataModel.userInfoUrl,
contentType: "application/json; charset=utf-8",
headers: {
'Authorization': 'Bearer ' + app.dataModel.getAccessToken()
},
success: function (data) {
self.myHometown('Your Hometown is : ' + data.hometown);
}
});
});
this.get('/', function() { this.app.runRoute('get', '#home') });
});
return self;
}
app.addViewModel({
name: "Home",
bindingMemberName: "home",
factory: HomeViewModel
});
和HTML看起來像這樣:
<!-- ko with: home -->
<!-- removed HTML to make it concise -->
<!-- /ko -->
現在,從這個(糾正我,如果我錯了)的與手柄指出一下,如果有是一個變量,稱爲家,然後顯示它(我認爲這是bindingMembername是什麼)。
因此,看到我可以猜測,如果我添加了另一個局部頁面並將其包含在內。我可以創建這樣的視圖模型:
function DrawViewModel(app, dataModel) {
var self = this;
Sammy(function() {
this.get('#draw', function() {
app.home = null;
});
});
return self;
}
app.addViewModel({
name: "Draw",
bindingMemberName: "draw",
factory: DrawViewModel
});
所以,從理論上講,因爲這設置app.home爲null每當有人導航到#draw,那麼將不會顯示在家庭部分,同樣我可以添加應用程序.draw = null爲homeViewModel隱藏繪製局部的sammy路由。
我的問題是,它會越來越複雜,我創建更多的viewModels。那麼,有什麼我失蹤?有沒有更簡單的方法來做到這一點?
我的最終目標是將所有頁面移到SPA(包括登錄/註冊頁面)。
乾杯提前, /r3plica
我不知道你爲什麼發送該鏈接。我知道每個ViewModel不是一個新頁面,頁面是加載的第一個頁面(在我的情況下是Index.cshtml),而且我試圖使用散列標籤吸引內容。 – r3plica 2014-09-02 12:46:46
就像剛開始時一樣,我使用了基於KO的框架幾年來,但轉移到Angular發現它更容易。即使像Durandal這樣的大型框架也正在從KO上移開(參見http://blog.angularjs.org/2014/04/angular-and-durandal-converge.html)。這裏有一個很好的教程,讓你開始。它讓我們的團隊在非常短的時間內瞭解了很多 - https://www.youtube.com/watch?v=i9MHigUZKEM。 – HockeyJ 2014-09-02 12:51:00
這很簡短,但主要想法是將'Sammy'導航到'app'(其中包含頁面數組和當前在'ko.observable'中選擇的頁面)。然後,在'layout.html'上,您將擁有一個ko模板,該模板將使用當前選定頁面的視圖模型。所以,當一個url改變時,在你的'Sammy'回調中你只需要改變當前頁面,ko會自動改變模板內容。因此,所有使用頁面和導航的工作都包含在一個地方 - 「應用程序」中。 – 2014-09-02 12:56:52