我在我的应用程序之上使用 angularJS。
我有一个控制器的基本示例:
function OrderListCtrl($scope, $http) {
$http.get('/static/angular/app/phones/van1.json').success(function(data) {
$scope.van1 = data;
});
$http.get('/static/angular/app/phones/van2.json').success(function(data) {
$scope.van2 = data;
});
}
和一个示例 JSON 条目
{
"id": "3",
"custName": "Mrs Smith",
"accountNumber": "416",
"orderNumber": "12348",
"orderWeight": "120.20"
},
我的 html 看起来像这样:
<div id=1>
<h1>Van 1 - Total Weight = XXX </h1>
<ul class="sortdrag">
<li ng-repeat="van1 in van1" id="[[ van1.id ]]">
[[van1.custName]] [[van1.accountNumber]] [[van1.orderWeight]]
</li>
</ul>
</div>
现在,我想获得 ul 中每个 li 项目的总重量。
如果列表是静态的,这将很容易,但是列表使用 jQuery-ui,并且我有多个列表,其中 li 项目在每个列表之间拖放。我的问题是,我怎样才能让 XXX 动态更新为 ul 中每个 li 中所有权重的值,或者更多的问题是这甚至可以做到吗?
我真的不想使用 onDrop 事件,因为这不适用于预先填充的列表,所以理想情况下,我想使用从 ul 中的所有 van1.orderWeight 值中获取其值的代码。
任何有关解决此问题的最佳方法的建议将不胜感激!在有人问我使用 [[ 和 ]] 而不是 {{ 和 }} 之前,因为我使用的是 jinja2 模板。
更新:
好的,阅读下面的答案后,将原始控制器修改为:
function OrderListCtrl($scope, $http) {
$http.get('/static/angular/app/phones/van1.json').success(function(data) {
$scope.van1 = data;
// This part is easy, calcuate the sum of all weights from the JSON data
$scope.sumV1 = _.reduce(_.pluck($scope.van1, 'orderWeight'), function (m, w) {return m + w}, 0);
});
$scope.getVan1Weight = function(){
// here I try and write a function to calculate the dynamic weight
// of a van, which will update when items get dropped in/out of the ul
_.reduce(_.pluck($scope.van1, 'orderWeight'), function (m, w) {return m + w}, 0);
}
还有我的模板
<div id="app" ng-controller="OrderListCtrl">
<div id=1>
<h1>Van 1 - Total Weight = [[getVan1Weight()]]
Starting Weight - [[sumV1]]</h1>
<ul class="sortdrag">
<li ng-repeat="van1 in van1" id="[[ van1.id ]]">
[[van1.custName]] [[van1.accountNumber]] [[van1.orderWeight]]
</li>
</ul>
</div>
现在我使用 underscorejs 库来帮助执行计算,但我似乎只能使用初始数据让它工作,而不是在从另一个 ul 拖入新订单时更新