我已经触发了一个名为“搜索”的事件以及一个对象。
$(".btn-class").on("click", function() {
var params = {
"searchText": "sometext",
"searchProps": ["prop1", "prop2", "prop3"]
};
COMP.Util.announce("search", {
params: params
})
});
在另一个班级,我正在听这个事件并处理那个对象:
var ListView = Backbone.View.extend({
init: function() {
COMP.Util.listenTo("search", $.proxy(this.applySearch, this));
},
applySearch: function(params) {
// do something
}
}
})
我的问题是当'params'传递给applySearch函数时,它就变成了一个包装对象:
params: Object
searchProps: Array[3]
searchText: "sometext"
__proto__: Object
__proto__: Object
如果打印,我得到了:
PARAMS =%5Bobject +对象%5D
我希望能够将Object中的'params'作为纯文本解包,并且还想知道为什么在这种情况下会发生包装
searchProps: Array[3]
searchText: "sometext"
__proto__: Object
这样打印: PARAMS = SEARCHTEXT = sometext&安培; searchProps = PROP1&安培; searchProps = PROP2&安培; searchProps = prop3
答案 0 :(得分:0)
你可以"打开"对象:JSON.stringify(params)
但是,我认为通过在params对象中添加一个名为params的键可能会使您自己感到困惑。您可能希望保留额外的密钥:
$(".btn-class").on("click", function() {
var params = {
"searchText": "sometext",
"searchProps": ["prop1", "prop2", "prop3"]
};
COMP.Util.announce("search",params)
});
答案 1 :(得分:0)
你可以重用jQuery方法param()来完成你的工作 它接受作为参数数组和普通对象:
var params = {
"searchText": "sometext",
"searchProps": ["prop1", "prop2", "prop3"]
};
var paramsEncoded = $.param( params );
alert(paramsEncoded)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>