我有一個資源的數據依賴於另一個資源。 Transaction
綁定到一個SplitTransaction
其中有一個交易列表。 從交易中,我需要知道SplitTransaction
的交易總額。解決資源依賴的另一個資源
這是我的資源:
.factory('Transaction', ['$resource', '$http', '$rootScope', 'SplitTransaction', '$q', function($resource, $http, $rootScope, SplitTransaction, $q){
var Transaction = $resource('/api/v1/transaction/:id', {}, {
query: {
method: 'GET',
isArray: true,
transformResponse: tastypieDataTransformer($http).concat(function (data, headersGetter) {
for (var idx in data) {
var transaction = data[idx];
if (transaction.installment_of) {
var split = transaction.installment_of.split('/');
var installmentId = split[split.length-1];
SplitTransaction.get({id: installmentId}).$promise.then(function (installment) {
transaction.installment_total = installment.transactions.length;
});
}
}
return data;
})
}
});
這是HTML:
<tr class="transaction-row" ng-repeat="transaction in group.transactions">
<td ng-bind="transaction.installment_total"></td>
</tr>
它顯示了在呈現的HTML什麼。
我試圖用承諾:
transformResponse: tastypieDataTransformer($http).concat(function (data, headersGetter) {
for (var idx in data) {
var transaction = data[idx];
if (transaction.installment_of) {
var split = transaction.installment_of.split('/');
var installmentId = split[split.length-1];
var deferred = $q.defer();
SplitTransaction.get({id: installmentId}).$promise.then(function (installment) {
var installment_total = installment.transactions.length;
deferred.resolve(installment_total);
});
transaction.installment_total = deferred.promise;
}
}
return data;
})
現在結合似乎工作,但只顯示[object Object]
上的HTML。
我在做什麼錯?
編輯:
如果我設置transaction.installment_total
的SplitTransaction.get
回調外,它顯示了HTML,所以綁定好的..就像這樣:
if (transaction.installment_of) {
var split = transaction.installment_of.split('/');
var installmentId = split[split.length-1];
transaction.installment_total = 0; // shows "0" on the html
SplitTransaction.get({id: installmentId}, function (installment) {
...
});
}
出於某種原因,發生了什麼回調內不反映綁定...
臨時解決方案:
我刪除代碼從transformResponse
到我加載Transaction
的:
Transaction.query(filter).$promise.then(function (result) {
$.each(result, function (idx, transaction) {
if (transaction.installment_of) {
var split = transaction.installment_of.split('/');
var installmentId = split[split.length-1];
transaction.installment_total = 0;
SplitTransaction.get({id: installmentId}, function (installment) {
transaction.installment_total = installment.transactions.length;
});
}
});
$scope.allTransactions = result;
$scope.transactionGroups = groupTransactions($scope.groupBy);
window.transactions = $scope.transactionGroups;
}).finally(function() {$scope.loading = false;});
不能說爲什麼這個工程。也許對象得到transformResponse
之後被拷貝,使得我在transaction
上的回調範圍沒有用處......
'group.transactions'和其他綁定是好的,這是一些工作代碼的片段。 還有其他綁定正在顯示的'group.transaction'的屬性。 如果我在'SplitTransaction.get(...)'部分之前手動將'total_installments'設置爲某個值,則此值將顯示在呈現的html上。 由於某種原因,回調中發生的變化並不反映在綁定上。 –
順便說一句,'for'與範圍相混淆,並且在回調命中時'transaction'的值有另一個內容。但是即使改爲'$ .each'也沒有解決。 –