来自JSON的jQuery Msgbox

时间:2012-02-03 14:40:39

标签: php jquery json

我正在尝试创建一个足够灵活的PHP后端,因此不需要将其重新编码为我可能想要使用的任何前端。部分原因是我试图从后端传递JSON,然后将其转换为msgbox。

这是来自我的测试页面,Firebug不断给我一个错误说:

missing : after property id
mybutton.title: mybutton.action

的 提到mybutton.title值。

这是我正在玩的代码:

var mybutton = new Object();
var mybutton = {'title': 'Done', 'action': function (){$(this).remove();}};
var title = mybutton.title;
var msg = "hello from the grave";

$("#SiteHolder").html(msg);             
$("#SiteHolder").dialog({ autoOpen: true, autoResize: true, width: 600, close: function(event, ui){$(this).remove();}, buttons: {
        mybutton.title: mybutton.action
      }
});

我也尝试将mybutton.title分配给变量,但它只返回变量名而不是内容。

请记住,在某些时候,这将扩展为一系列按钮。

3 个答案:

答案 0 :(得分:1)

对话框按钮的定义方式如下:

$( ".selector" ).dialog({ buttons: [
    {
        text: mybutton.title,
        click: mybutton.action
    }
] });

请永远不要写

var mybutton = new Object();

var mybutton = {};

如果你想稍后扩展它,只需将mybuttons定义为一个对象数组并说:

$( ".selector" ).dialog({ buttons: mybuttons });

答案 1 :(得分:1)

一个好方法是解决你的更大问题(最小化前端/后端依赖关系)是使用一个现成的模板组件,它主要采用JSON作为参数,并且可以很好地处理解析HTML。这也有助于将HTML结构与创建它的代码分开,从长远来看,IME可以帮助维护。

这些引擎的示例包括jQotemoustache和其他许多引擎。

答案 2 :(得分:0)

您无法评估对象键mybutton.title。代替:

var buttons = {};
buttons[mybutton.title] = mybutton.action;

$("#SiteHolder").dialog({
    autoOpen: true,
    autoResize: true,
    width: 600,
    close: function(event, ui) {
        $(this).remove();
    },
    buttons: buttons
});