2016-02-25 112 views
2

我在一家Wakanda環境在與角wakanda連接器的工作打交道時獲取/設置實體。有關係屬性

假設這種模式:僱員(名字,姓氏,公司)和公司(名稱)

在員工的形式,我有一個充滿公司名稱(這是一個實體的集合)的選擇輸入。

我已經設置在選擇

一個ng-model="selectedCompany"當我選擇一個公司,並進行保存,我得到代表我有過在我的選項(ID或名稱)的值值值。

當我使用$create()方法的值賦給一個新的實體,我不知道哪條路實體設置到關係屬性。我認爲我必須給一個實體。問題是我已經擁有了所有實體的實體集合。所以我沒有看到爲什麼我應該再次查詢服務器的原因,只是爲了分配我已經有的東西。

所以問題是我們應該有一個像$find$getById這樣的方法,它不會在服務器上執行請求,而是獲取已經在entityCollection中加載的實體。現在我使用我自己的方法對數組進行簡單循環。 (我可以共享代碼,如果有人需要它)

我缺少一個辦法做到這一點?

回答

2

假設你selectedCompany變量包含(類型公司),你只有一個實體轉嫁$create()調用與屬性名這樣這個變量:

var newEmployee = ds.Employee.$create({ 
    firstName: 'foo', 
    lastName: 'bar', 
    company: $scope.selectedCompany 
}); 

如果selectedCompany只包含公司名稱或ID ,這是在你有一個數組映射公司與他們的名字或ID。類似的東西:

//When retrieving collection 
var companyMap = []; 
companies.forEach(function (company) { 
    companyMap[company.ID] = company; 
} 

//When you want your company with its ID 
var company = companyMap[$scope.selectedCompany]; 

但最簡單的方法是第一次,你<select>通過實體集合直接迭代,這樣就可以處理的實體。


編輯:檢索對象與ng-option

要獲得,您只需在select迭代的對象,你可以使用ng-option這樣的:

<select 
    ng-model="selectedCompany" 
    ng-change="companyChanged()" 
    ng-options="c.name for c in companies" 
> 
</select> 

在控制器

$scope.selectedCompany = null; 
$scope.companyChanged = function() { 
    if ($scope.selectedCompany) { 
    //selectedCompany is your company entity 
    //you can manipulate it like any other entity 
    $scope.selectedCompany.$save(); //for example 
    } 
}; 
+0

你試試你的第一條語句的實體?因爲我嘗試了,我無法將實體值傳遞給我的html選項元素。如果我這樣做,我只是設置一個字符串來表示一個JSON對象,我不能傳遞給實體關係屬性。所以對我來說,映射解決方案是最好的,因爲我可以獲取對象,然後屬性正在等待。 – Ganbin

+0

這裏是我的html代碼''你想要我要做到這一點:'選項ng-repeat =「formCtrl.categories中的類別」class =「form-group」value =「{{category}}」> {{category}}'?但是,這將打印像我說的JSON字符串,並沒有真正得到實體對象。 – Ganbin

+1

你可以在你的'