2013-02-05 31 views
0

我剛開始使用mustache.js,我有我的json字典,我的html模板和我的mustache.js啓動代碼注入整個。我的HTML的小鬍子模板是這樣的:Mustache.js:大JSON字典和更小的知道條目列表隨機顯示onfly?

<script id="tpl" type="text/html"> 
    <div class="body"> 
     <p>{{口.zht}}</p> 
     <p>{{口.sam.pyn}}</p> 
     <p>{{口.sam.fra}}</p> 
    </div> 
</script> 

在我的測試情況下,給定的現有條目「口」,它的工作原理(1)。但我注意到,鬍鬚似乎設計爲迭代全部的JSON條目。不過,我想在條目

var focusList = ['們','火山口','火']; 

爲此,我想從我的大(〜1000個條目)JSON字典挑相應數據的一小focusList工作。

如何根據我的focusList更改或生成變量{{口}}和{{/口}},所以我可以用正確的數據打印我的模板?

有模板這樣一些類型的變量:

<script id="tpl" type="text/html"> 
    <div class="body"> 
     <p>{{{{entry}}.zht}}</p> 
     <p>{{{{entry}}.sam.pyn}}</p> 
     <p>{{{{entry}}.sam.fra}}</p> 
    </div> 
</script> 

和我添加JS:

var entry = focusList[Math.floor(Math.random() * focusList.length)]] 

+0

你可以在鬍子看到任何東西之前把你想要的東西切片出來嗎? Mustache常用的方法是在Mustache看到數據之前完成所有數據按摩。 –

+0

我是一位在JS/HTML/CSS中進行概念驗證的博士語言學家。不幸的是,我無法用其他語言處理JSON字典。我應該使用focusList = ['們','火山口','火']創建字典的部分副本,然後讓mustach.js處理這個miniDictionary? JS指示/關鍵字請。 – Hugolpz

+0

是的,數據的部分副本將是通常的鬍鬚方式。你也可以檢查一些其他的模板引擎(http://garann.github.com/template-chooser/),當然它們都有其優點和缺點。 –

回答

2

解決方案:從給予更大的JSON數據鍵,小鬍子打印相關條目的小清單:

//1. Suggest a smaller custom list of keys existing in the larger data. 2. Randomize. 
var focusList = ['們','火山口','火']; 
var randomKey = focusList[Math.floor(Math.random() * focusList.length)]; 
//3. variable + Template + variable. 4. printing. 
var template = ('{{#'+ randomKey +'}}'+ $('#tpl').html() +'{{/'+randomKey+'}}'); // as {{#火}} ... {{/火}} 
var output = Mustache.render(template, myBigJSON); 
$('#main').append(output) 

或者1:你也可以使用Object.keys項目的整個列表(2)以打印從整個列表中的隨機條目:

//1. Get and create the list of all keys 
var focusList = Object.keys(myBigJSON); 

最後,而不是隨機和循環可能會重複一些條目,您可能shuffle the given listiterate the shuffled list systematically系統地打印每個項目。