2016-02-25 113 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

你可以在你的'