如果模型类似于ng-model =" record.name"那么双向绑定不起作用。用于Kendo UI控件

时间:2014-08-17 13:59:34

标签: angularjs kendo-ui

我遇到了Kendo UI控件的问题

我的HTML

 <input type="text" ng-model="record.name" kendo-numeric-text-box />
 <input type="text" ng-model="record.name"> </input>
 <button ng-click="resetRecord()" >test bind</button>

我的test.js

$scope.record ={};
$scope.resetRecord= function(){
        $scope.record = {};
    }

好吧,当我执行函数resetRecord只是标准输入清除时,kendo ui输入不清楚,我已经尝试了$scope.record =null它也不起作用。

如果我更改为下面的代码,它可以工作,但我需要它像上面那样工作

$scope.resetRecord= function(){
        $scope.record. name = null;
    }

所有输入Kendo UI都会发生这种情况,而不仅仅是kendo-numeric-text-box

如果有办法与record对象进行迭代,发现所有&#34;属性&#34;,例如名称,它将对我有效。

我的意图是只有一个控制器用于系统的所有CRUD屏幕,我不想为系统的每个实体编写一个带有模型定义的控制器。 这是一个错误吗?

更新 - 已解决

解决方案1   正如runTarm在解决方案2中所说。

for (prop in $scope.model.record) {
            $scope.model.record[prop]='';
        } 

解决方案2    只需将属性k-rebind添加到Kendo UI控件,它就会根据ng-model更新内容。

input type="text" ng-model="record.name" k-rebind="record.name" kendo-numeric-text-box />

1 个答案:

答案 0 :(得分:1)

这不是错误,而是由于JavaScript对象的 Prototypal Inheritance 特性导致的常见问题。我建议您阅读Understanding-Scopes了解更多详情。

您可以将record存储在另一个对象中,而不是直接存储在$scope中,从而避免此问题。例如:

$scope.model = {};
$scope.model.record = {};
$scope.resetRecord = function() {
  $scope.model.record = {};
}

同时更改ng-model

<input type="text" ng-model="model.record.name" kendo-numeric-text-box />
<input type="text" ng-model="model.record.name"> </input>
<button ng-click="resetRecord()" >test bind</button>

或者如果您不想添加额外的model.,您提到的替代解决方案就是您所提到的。

您可以迭代对象的属性并将其全部删除:

for (prop in $scope.record) {
  delete $scope.record[prop];
}

希望这有帮助。