0

我有一个模型,它具有(例如)购物车项目 ID 和要添加到购物车的可用项目列表。这是一个假的例子。

  table#items 
    tbody
      tr(ng-repeat="item in cart.items")
        td.hide {{item.id}}
        td {{availableItems.where(id: item.id).first.name}} <-- pseudo code 
        td ({{item.shippingType}})

我想做的是将第二个单元格绑定到可用项目列表中的项目名称,而不是通过将该值放在 2 个位置来混淆模型。我会使用过滤功能来做到这一点吗?文档非常简单。如何传递item.id给过滤器功能?

我已经在标记中更接近了:

td {{availableDatasources | filter: itemNameById}}

这在范围内:

$scope.itemNameById= function(item) {
  lodash($scope.availableItems).find({
      id: item.id
    }).name;
};

唯一的问题是我没有得到一个名字(即使这就是过滤器似乎正在返回的)——我得到了所有可用的项目。它击中了过滤器代码,但过滤器似乎没有过滤。

4

1 回答 1

1

老实说,我不确定这是否值得。您的购物车可能只是对您的 availableItems 数组中的对象的引用数组,因此您并没有真正重复任何事情。

但是如果我想按照你说的做,我会在我的项目中包含 underscore.js。

http://underscorejs.org/

然后在控制器中,我会在范围内添加下划线:

$scope._ = _;

在我的模板中,我会写

td {{_.findWhere(availableItems, {id: item.id}).name}}

或者,更有可能的是,我会在我的范围内添加一个更具体的功能:

$scope.productFromId = 
     function(id) { return _.findWhere($scope.availableItems, {id: id});};

然后在模板中:

td {{productFromId(item.id).name}}
于 2013-06-24T22:54:34.510 回答