2013-10-14 71 views
0

我目前正在使用sammyjs + knockoutjs開發一個小型SPA。SammyJS並不總是開火路線

我有一個index.html,其中包含路由機制和ID爲'main'的div。

在我減少到問題的示例中,有一個頁面1和頁面2使用部分加載html頁面。特定的html頁面具有敲除綁定。

問題:當我使用鏈接在頁面之間切換時,路由並不總是觸發。當使用適當的鏈接重新加載頁面時,它會在沒有問題的情況下觸發並加載。

我試圖把它變成一個JSBin:

http://jsbin.com/ufOroze/3/edit?html,js,console,output

當你點擊鏈接,他們應該實際加載從遠程HTML文件(p1.html和p2.html)的一些內容 - 雖然這不適用於JSBin。無論如何。您會看到該調用,並不總是被觸發,並且在控制檯上顯示鏈接。

我還在我的服務器上放了一個例子。您還可以找到包含整個示例的zip文件的鏈接:http://www.tomgrill.info/sammy_test/sammy_test.zip

有人有想法嗎?我誤解了sammyjs或oder的概念是否存在錯誤?

最好的,湯姆

回答

0

爲什麼沒有收穫淘汰賽的權力,讓它呈現#main DIV你,現在你混淘汰賽和jQuery。

我做了一個KO重量輕SPA引導程序,這裏是一個示範項目

https://github.com/AndersMalmgren/Knockout.Bootstrap.Demo

它接管配置的方式爲您處理在約定的模板。

編輯:維基演示瞭如何設置它在任何後端

https://github.com/AndersMalmgren/Knockout.Bootstrap/wiki

基本上你需要公開,返回模板

+0

嗨。我看了一下你的代碼。偉大的方法。你還有一個純HTML/Javascript/Knockout版本嗎?會非常有幫助的(因爲我不在Windows上而不是使用Visual Studio)。先謝謝你! –

+0

請參閱編輯 – Anders

+0

很好。謝謝! –

0

嘗試了這一點: -

app = $.sammy('body', function (context) { 
    this.get('#/', function() { 
     console.log('Clicked'); 
     this.app.swap('sammy test'); 
    }); 
    this.get('#/:id', function() { 
     console.log('Clicked'); 
     var id = this.params.id; 
     ko.unapplyBindings($('#main'), false); 
     this.partial('pages/' + id + '.html'); 
    }); 


}); 
+0

不幸的是這不起作用REST服務。我只想改變div(#main)的內容。 –

+0

找出它的工作原理。該方法是正確的。只需重置要加載的特定頁面內設置的變量,以便能夠重新建立ko綁定。這是不好的,因爲每次交換頁面時都必須重新初始化數據。但它的工作。 :) 謝謝! –