摘要:在中動(dòng)態(tài)更換模板本文來源由赤石俊哉翻譯整理。當(dāng)我們開始基于在數(shù)組中的每一個(gè)項(xiàng)目所關(guān)聯(lián)的事實(shí)變換模板的時(shí)候,事情就變得又去了。我們的綁定就像這樣了現(xiàn)在,這個(gè)文章可以動(dòng)態(tài)地顯示,以及根據(jù)情況顯示。
在KnockoutJS中動(dòng)態(tài)更換模板
NOTE:
本文來源 Dynamically Changing Templates in KnockoutJS - Knock Me Out
由 赤石俊哉 翻譯整理。
在KnockoutJS的1.12版本之后新增了一個(gè)很有趣也很有用的特性,那就是可以為template綁定的模板名稱傳遞一個(gè)函數(shù)。這樣的話,就方便了:
允許你基于你的視圖模型狀態(tài)來動(dòng)態(tài)渲染一個(gè)部分
在一個(gè)foreach條件里面,允許你使用不同的模板渲染數(shù)組中的每個(gè)獨(dú)立的項(xiàng)目。
讓你在不需要過多在意條件邏輯的情況下,使每種情況的模板簡(jiǎn)短且可復(fù)用。
舉一個(gè)簡(jiǎn)單的場(chǎng)景來說,你可能希望一個(gè)用戶可以在摘要和詳細(xì)兩種顯示文章的方式之間切換。
我們的視圖模型可以是這樣的:
var viewModel = { articles: [{ id: 1, title: "Article One", content: "Content for article one."}, { id: 2, title: "Article Two", content: "Content for article two."}, { id: 3, title: "Article Three", content: "Content for article three."} ], selectedView: ko.observable("summary"), selectedArticle: ko.observable() };
在我們的數(shù)據(jù)綁定中,我們?cè)O(shè)置selectedView為可觀測(cè)的,并且是基于一些單選框的。模板的名字指定不再是一個(gè)字符串,而是可以用selectedView來綁定的。
Note: 我們返回一個(gè)匿名函數(shù),因?yàn)橹苯訛橐粋€(gè)可觀測(cè)的變量設(shè)置的綁定,只會(huì)在我們不給這個(gè)模板綁定傳遞選項(xiàng)作為對(duì)象遍歷的時(shí)候才生效。我們必須要將foreach或者data傳遞給這個(gè)綁定。
Summary Details
現(xiàn)在,我們可以簡(jiǎn)單的在summary和details兩個(gè)模式之間切換了。通常來說,在我們可以使用一個(gè)擁有條件邏輯的模板為每一個(gè)視圖之前,我們需要使用visible綁定來隱藏一個(gè)或者多個(gè)。
當(dāng)我們開始基于在數(shù)組中的每一個(gè)項(xiàng)目所關(guān)聯(lián)的事實(shí)變換模板的時(shí)候,事情就變得又去了。有可能我們還會(huì)加入一個(gè)edit模式用一個(gè)可觀測(cè)的變量來跟蹤選擇的文章。
然后,我們的邏輯可能會(huì)變得越來越復(fù)雜,讓我們添加一個(gè)用來判斷該使用哪個(gè)模板的方法吧。
viewModel.selectedArticle = ko.observable(); viewModel.templateToUse = function(item) { return item === this.selectedArticle() ? ‘edit’ : this.selectedView(); }.bind(viewModel);
注意,這個(gè)方法使用數(shù)據(jù)項(xiàng)目作為第一個(gè)參數(shù)。Knockout從foreach的循環(huán)中向這個(gè)方法傳遞當(dāng)前的項(xiàng)目。我們的綁定就像這樣了:
現(xiàn)在,這個(gè)文章可以動(dòng)態(tài)地顯示summary,detail以及根據(jù)情況顯示edit。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/84155.html
摘要:當(dāng)然我們還可以引入框架,這些框架一般都自帶模板處理引擎,比如等語義化命名和語義化標(biāo)簽我們盡量多采用語義化來命名,并且采用語義化標(biāo)簽來書寫代碼,多用中新增的標(biāo)簽來書寫。 1.黃金法則(Golden rule) 不管有多少人參與同一個(gè)項(xiàng)目,一定要確保每一行代碼都像是同一個(gè)人編寫的。 Every line of code should appear to be written by a si...
摘要:目前已經(jīng)在大大小小多個(gè)線上產(chǎn)品中使用了,也收集了一些有效的建議好了,該看下一個(gè)最簡(jiǎn)單的組件長(zhǎng)什么樣吧免費(fèi)領(lǐng)取驗(yàn)證碼內(nèi)容安全短信發(fā)送直播點(diǎn)播體驗(yàn)包及云服務(wù)器等套餐更多網(wǎng)易技術(shù)產(chǎn)品運(yùn)營(yíng)經(jīng)驗(yàn)分享請(qǐng)?jiān)L問網(wǎng)易云社區(qū)。文章來源網(wǎng)易云社區(qū) 本文由作者鄭海波授權(quán)網(wǎng)易云社區(qū)發(fā)布。 此文摘自regularjs的指南, 目前指南正在全面更新, 把老文檔的【接口/語法部分】統(tǒng)一放到了獨(dú)立的 Reference...
摘要:近幾年前端框架特別流行,比如等。有沒有能夠在多種前端控件下都能使用的表格控件還真有中的,能支持很多主流的框架。在純下使用文件引入的文件和樣式引入和文件。獲得控件,并進(jìn)行數(shù)據(jù)綁定。 近幾年 Web 前端框架特別流行,比如 AngularJS、AngularJS 2、ReactJS、KnockoutJS、VueJS 等。表格控件是我們?cè)陂_發(fā)中經(jīng)常要用到的控件。有沒有能夠在多種前端控件下都能...
摘要:前言我是,如果你還不認(rèn)識(shí)我,不妨先看看技術(shù)的前世今生一,以及技術(shù)的前世今生二前面我提過,我的大哥有一個(gè)叫的死黨,這家伙有事沒事經(jīng)常上我們家串門。時(shí)間來到了年,在那前后發(fā)生了兩件事讓我印象深刻。傳送門技術(shù)的前世今生一技術(shù)的前世今生二 前言:我是JavaScript,如果你還不認(rèn)識(shí)我,不妨先看看《Web技術(shù)的前世今生(一)》,以及《Web技術(shù)的前世今生(二)》 前面我提過,我的大哥HTML...
閱讀 3242·2021-10-21 17:50
閱讀 3254·2021-10-08 10:05
閱讀 3380·2021-09-22 15:04
閱讀 581·2019-08-30 14:00
閱讀 1939·2019-08-29 17:01
閱讀 1508·2019-08-29 15:16
閱讀 3219·2019-08-26 13:25
閱讀 852·2019-08-26 11:44