4

我正在为 Jquery Mobile 列表视图构建一个模板。为了使模板完全通用,我需要传递 listitem 文本。所以目前我的列表视图配置如下所示:

<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 构造函数。这应该是以下内容:

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

但是像这样插入它:

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

不起作用。

问题
如何在 JSON 中包含 Javascript 构造函数?

4

4 回答 4

0

试试这个代码:

"text":"'"+ inv.company+ "', '"+ inv.zip + "','" + inv.city+ "'";
于 2012-12-22T17:38:14.963 回答
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)然后在我的脚本中我添加buildRetailers到我的dynoData模块中:

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 配置中传递函数字符串,所以我需要添加一个函数来构造我需要的东西。如果有人知道更好的方法,请发布。我会测试和检查。

于 2012-12-22T17:56:15.010 回答
0

你不能只传递 inv 对象的对象文字版本是什么。

"text" : {
    "company": "some value here",
    "zip": "another value here",
    "city": "another value"
}
于 2012-12-22T18:18:35.457 回答
-1

通常你会这样做:

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

但我不确定它是否有效。无论如何你都可以试试。

于 2012-12-22T17:29:27.707 回答