我正在使用emberjs来寻找东西,但问题是与Ember相关的JS更多。
我有两个变量:var type = "stars"; var term = "5"
我的API中有一个名为stars的属性。
当我这样做时:App.Response.find({stars: term});
我找到了结果
但是,当我这样做时:App.Response.find({type: term});
我不找到结果。我希望将其翻译为App.Response.find({stars: term})
,因为type
的值为"stars"
我假设这是因为type
(值为stars
)未被理解为哈希键?
答案 0 :(得分:2)
确实 - 它不会评估对象键。如果您想以[{1}}动态创建该对象,您可以这样做:
{stars:5}
答案 1 :(得分:2)
在对象文字中没有动态的方法来设置对象键。
你必须做
var conditions = {},
type = "stars",
term = "5";
conditions[type] = term;
App.Response.find(conditions);
如果你发现自己经常使用这种模式,你可以设置类似
的东西var buildObject = function(key, value) {
var base = {},
base[key] = value;
return base;
};
var type = "stars",
term = "5";
App.Response.find(buildObject(type, term));
// or directly as
App.Response.find(buildObject("stars", "5"));
最后,让我们让buildObject
助手更有用
// accepts [key, value] pairs
var buildObject = function() {
var base = {};
for (var i=0; i<arguments.length; i++) {
base[arguments[i][0]] = arguments[i][1];
};
return base;
};
现在我们可以传递多对
App.Response.find(buildObject(["stars", "5"], ["foo", "bar"]));
// equivalent to
App.Response.find({stars: "5", foo: "bar"});