2015-04-23 24 views
0

我在IE8中遇到了Knockout(v3.2)問題。綁定表達式如在IE8中,KnockoutJS 3.2顯示實際的可觀察函數而不是觀察值

<div data-bind="text: $data.Property"></div> 

-where Property被一個observable-導致基因敲除的可觀察到的功能的實際文字,而不是顯示所述值Property的假定來表示。

縱觀規格(淘汰賽茉莉測試),我發現,他們明確不支持文本節點綁定IE < 9(線442)https://github.com/knockout/knockout/blob/master/spec/bindingAttributeBehaviors.js#L442

添加括號似乎解決這個IE8的text: $data.Property()但是,擔心的是:這會對其他瀏覽器產生不利影響嗎?我最初的假設是不是因爲一些常識性的原因,但我想知道是否有人知道這種解決方法,或者是否添加括號?

更新1:感謝大家在這一點上的意見。進一步調查後,似乎問題是有重複的JavaScript文件被加載。

更具體地說,有的則是過分重複重複淘汰賽庫導致視圖模型的觀測是一個不同的情況下這意味着他們無法正常展開進行顯示。

這被證明是由周圍的淘汰賽庫喜歡這裏建議什麼加一個條件:Stop IE from loading dynamically included script twice。添加條件使得首選綁定方法(取決於淘汰解包觀察對象)在IE8中工作。

的問題無/答案,我迄今發現將在我的情況就足夠了,所以我會問如何防止多淘汰賽庫加載兩次的新問題。

更新2:新問題張貼對於那些想跟着:How to stop Knockout 3.2 library loading twice

+0

添加括號就是了。我從來不喜歡knockout是如何神奇地決定是顯示綁定的值還是調用它,然後顯示返回值。現在我有一個不信任的具體理由!我經常放置父母,所以沒有混淆。兩者之間不應有任何顯着差異,並且您不會引入任何x瀏覽器問題。 – spender

+0

我已經在Chrome(當前版本),IE9,10和11中測試過這些parens,並且如果有幫助的話,它們已經成功了。 –

+0

如果你省略'$ data'前綴,你應該可以跳過parens,只需要'text:Property' – dfperry

回答

0

我更新的問題,但由於在技術上對這一問題的回答,我將在這裏,使其能夠繼續它在SO上的生命週期。

經過進一步調查,似乎問題是有重複的JavaScript文件被加載。

我開始從淘汰賽在IE8運行Live Examples。這些與首選的非括號語法一起工作。很明顯,淘汰賽在那裏正確地處理事情,所以我深入到圖書館,從我的問題頁面,逐步通過每一行。我證實觀察模型的觀察結果未被解開。

爲展開觀測的邏輯包括檢查以查看解開實例是否實際上是可觀察到的。該方法是ko.isObservable。這張支票是說視角模型的可觀察量實際上不是可觀察的。 ko.isObservable方法檢查每個實例所代表的函數,並且如果引用匹配,則該方法返回true。這告訴我這兩個功能的實例是不同的。這也表明重複的ko實例可能存在。

查看IE的網絡選項卡,淘汰賽庫正在加載兩次。這可以解釋爲什麼視圖模型的觀測值和ko.observable實例是不同的。視圖模型使用ko.observable的第一個實例。然後整個ko實例被淘汰庫的第二次加載覆蓋(當庫加載時,它被執行)。

這被證明是由周圍的淘汰賽庫喜歡這裏建議什麼加一個條件:Stop IE from loading dynamically included script twice。添加條件使得首選的綁定語法(取決於淘汰解包觀察對象)在IE8中工作。

也就是說,答案是簡單地增加括號是足夠的解決辦法在這種情況下,並且有或者是一個實際的解決方案對重複文件加載哪位一個解決辦法是另外一個問題。