2011-07-12 70 views
1

我一直在試驗一個不顯眼的Knockout數據綁定jQuery插件。請點擊鏈接hereUnobtrusive Knockout Template問題

雖然,我似乎無法弄清楚如何保持「data-bind」屬性不在模板中。我無法決定是否應該這樣做。我只是有一種預感。

示例模板:

<script id="storeTemplate" type="text/x-jquery-tmpl"> 
    <li> 
     <div class="storeTitle" data-bind="click: select">${storeTitle}</div> 
    </li> 
</script> 

我想,這可能是拉data-bind="click: select"出來的有一個好主意。有沒有人有一個想法,如何做到這一點?我試過$(".storeTitle").dataBind({ click: "select" }); jQuery選擇器只選擇已經在DOM中創建的對象,但我們想要編輯的元素不是DOM的一部分。另外,我想避免多次應用綁定。

+1

我剛剛檢查了代碼,但沒有看到爲什麼插件無法在模板中工作的任何原因。你需要用'$(「。storeTitle」)。dataBind({click:「select」});' – neebz

+0

我也不太確定你的意思。我之前嘗試了上面的這一行(剛剛嘗試過),但它對我沒有任何作用。我也查看了插件,它只選擇已經在DOM中創建的對象,正如jQuery通常所做的那樣。我會稍微更新一下我的問題。 – BDawg

回答

0

看來我只是回答我自己的問題。考慮到模板中的元素實際上是坐在DOM中(只是字符串形式),我可以修改字符串並添加data-bind =「click:select」。一位同事建議我暫時插入模板文本作爲innerHTML,而不是進行字符串操作,而是將其添加到DOM中,使用插件對其進行修改,將修改後的版本作爲文本插入到模板中並應用綁定。

+1

只要確保你在IE中測試它:) IE瀏覽器似乎對編輯現有腳本元素的文本有點挑剔。否則,我會建議像這樣的東西:http://jsfiddle.net/rniemeyer/5dkMg/你將它們加載到一個jQuery對象中,並且實際上並沒有將它們插入到DOM中。 –

+0

@ RP尼邁耶 - 非常感謝這篇技巧!我只注意到我所做的代碼在IE 9中不起作用。 – BDawg

+0

我發現IE <9不支持修改元素的innerHTML。我通過刪除和重新創建元素來解決它。此外,他們從innerHTML中的屬性中刪除雙引號,如果要修改它並從中創建另一個元素,則無助於此。我必須用正則表達式來玩一段時間才能解決這個問題 – BDawg