javascript
  • jquery
  • html
  • json
  • 2012-12-22 109 views 4 likes 
    4

    我正在爲Jquery Mobile listviews建立一個模板。爲了使模板完全通用,我需要傳遞listitem文本。所以,目前我的列表視圖的配置是這樣的:如何在JSON字符串中包含Javascript字符串構造函數?

    <ul data-role="listview" data-create="false" class="template" data-config='{ 
        "type":"listview", 
        "data":"getRetailers", 
        "custom_classes":["embedded_filter updateResults f-875","nMT pickList f-875 widget_listview","f-n",""], 
        "lib":"static_listview.html", 
        "tmp":"tmp_listview_inset", 
        "lang":"locale_search", 
        ... 
        }'></ul> 
    

    我的問題是如何將一個Javascript constuctor列表項文本。這應該是以下幾點:

    inv.company+', '+ inv.zip + ', ' + inv.city 
    

    但插入這樣的:

    ... 
    "text":"inv.company+', '+ inv.zip + ', ' + inv.city" 
    } 
    

    不起作用。

    問題
    如何在JSON中包含Javascript構造函數?

    回答

    0

    確定。不是很好,但工作:

    1)在我的JSON我只傳遞一個函數的名字,像這樣:

    <ul data-role="listview" data-create="false" class="template" data-config='{ 
        "type":"listview", 
        "data":"getRetailers", 
        "custom_classes":["embedded_filter updateResults f-875","nMT pickList f-875 widget_listview","f-n",""], 
        "lib":"static_listview.html", 
        "tmp":"tmp_listview_inset", 
        "lang":"locale_search", 
        "text":"buildRetailers", 
        ... 
    }'></ul> 
    

    2)然後在我的劇本我加入buildRetailersdynoData模塊:

    var dynoData = { 
        ... 
        buildRetailers: function (inv) { 
         return inv.company+', '+ inv.zip + ', '+ inv.city; 
        }, 
        ... 
    } 
    

    3)從我的列表視圖字符串生成器稱之爲:

    .... 
    listItem = listItem.replace(widget.options.re_theme, li_theme); 
    listItem = listItem.replace(widget.options.re_iconpos, li_iconpos); 
    listItem = listItem.replace(widget.options.re_icon, li_icon); 
    // call the function to return the list item text 
    listItem = listItem.replace(widget.options.re_text, dynoData[ li_text ](inv)); 
    

    所以我似乎無法通過JSON配置中的函數字符串,所以我需要添加一個函數來構造我所需要的。如果有人知道更好的方式,請發佈。我會測試和檢查。

    +1

    只有另外一種方式是用JSON雙引號文本寫入函數並使用'eval',但'eval'最好避免 – charlietfl

    +0

    是的。好主意。但我從來沒有使用eval :-) – frequent

    -1

    通常你會做這樣的:

    "text": function(){ return inv.company+', '+ inv.zip + ', ' + inv.city } 
    

    但我不知道如果它的工作原理。無論如何你都可以嘗試。

    +1

    JSON中沒有函數。 –

    +0

    哦,那麼我在JavaScript方面所做的所有工作都與宇宙有關。這是聖誕節的奇蹟。 –

    +2

    您可能會考慮對象文字。 JSON源於它們的語法,但它們並不相同。你可以在這裏看到JSON中沒有函數的語法:http://json.org/。不需要嗤之以鼻。 –

    0

    試試這個代碼:

    "text":"'"+ inv.company+ "', '"+ inv.zip + "','" + inv.city+ "'"; 
    
    +0

    hm。看貨物。 1秒 – frequent

    +0

    打破頁面。不起作用。 – frequent

    0

    難道你不能傳遞inv對象的對象字面值版本嗎?

    "text" : { 
        "company": "some value here", 
        "zip": "another value here", 
        "city": "another value" 
    } 
    
    +0

    nope,因爲'inv'包含大約30個字段,我不得不遍歷它們來創建地址列表。如果它是一個單一的項目,那麼是的,我可能會這樣做。 – frequent

    相關問題