0

我正在使用 Angularjs 和 rails 来构建网站。该页面正在管理一个 Foo 对象,而 Foo 有一个名称字段和一个定义字段。

在我的编辑页面中,我正在处理 Foo 对象 1,并且我有一个选择(下拉)控件,其中包含可供选择的现有 Foo 对象的列表(过滤掉当前的 Foo 对象是有意义的)

如果用户从选择中选择了一个现有的 Foo 对象,我不想更改我正在编辑的 Foo 对象,我只希望当前 Foo 对象的定义字段使用来自所选 Foo 对象的定义字段内容进行更新(来自选择框)。

我目前有一个这样定义的选择:(并且 obj 是我正在处理的 Foo 对象)

<select id="foo_list{{obj.id}}" ng-model="obj.definition"
      ng-options="d.name for d in existing_foos | orderBy:'name'" 
      ng-change="changeFooDefinition()">
</select>

在 changeFooDefinition() 方法中,我想用所选的 Foo 对象的定义更新当前的 obj.definition。

当前代码所做的是更改整个表单中我正在处理的 Foo 对象。我只想将选定的定义复制到当前的对象定义中。我怎样才能做到这一点?

提前致谢,

最大限度

4

1 回答 1

1

当前,您将 $scope.obj.definition 绑定到 Foo 对象,而不仅仅是 foo 对象的定义。您需要做的是将选定的 Foo 对象绑定到另一个范围变量,然后设置 obj.definition 等于这个新变量的定义(应该是 Foo 对象)。

HTML:

<select id="foo_list{{obj.id}}" ng-model="selectedFoo" 
    ng options="d.name for d in existing_foos | orderBy:'name'" 
    ng-change="changeFooDefinition()">
</select>

JS:

myApp.controller('Ctrl', ['$scope, function($scope) {
    $scope.obj = { name: 'currFoo', definition: 'changePls', id: 333 };

    $scope.existing_foos = [ 
        { name: 'foo1', definition: 'first foo', id: 1 },
        { name: 'foo2', definition: '2nd foo', id: 2 },
        {name: 'foo3', definition: '3rd foo', id: 3 }
    ];

    $scope.changeFooDefinition() {
        obj.definition = selectedFoo.definition;
    }
}]);

看到它在这里工作:http: //jsfiddle.net/ADukg/2120/

如果我误解了你的要求,请告诉我,如果是这样,希望我能相应地修正我的答案。

于 2013-03-23T06:13:44.467 回答