0

我正在使用 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(带有 value stars)没有被理解为哈希键?

4

2 回答 2

2

完全正确 - 它不会评估对象键。如果您想动态创建该对象,{stars:5}您可以这样做:

var obj = {};
obj[type] = term;//Using the array notation will cause JS to evaluate type to "stars" and use that as the key
//obj is now {stars:5}
App.Response.find(obj);
于 2013-08-22T15:43:19.637 回答
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"});
于 2013-08-22T15:48:02.923 回答