2014-03-25 77 views
1

我正在使用AngularJS以及Parse和Parse-Angular-Patch。我有一个示例应用程序,它可以处理基本的垃圾。 My CRUD app角度JS双向绑定网格中的下拉列表

当我点击编辑按钮。该称呼失去了它的状态。 My bug

下面是相关的HTML:

 <tbody data-ng-repeat-start="p in people" data-ng-data="who"> 
      <tr> 
       <!-- Salutation --> 
       <td style="min-width:95px;"> 
        <span data-ng-hide="editRow == $index">{{p.get('salutation')}}</span> 
        <select data-ng-show="editRow == $index" data-ng-model="model.salutation" class="formControl" data-ng-options="s.label for s in salutations"> 
         <option value="">--</option> 
        </select> 
       </td> 
      ... 
       <!-- Action Buttons --> 
       <td> 
        <button class="btn btn-xs btn-primary" data-ng-click="onEdit($index)" data-ng-hide="editRow==$index" style="min-width:70px;"> 
         <span class="glyphicon glyphicon-pencil "></span>&nbsp;edit 
        </button> 
        ... 

你可以看到完整的HTML:https://github.com/arcnovus/learning-parse-angular-patch/blob/master/views/crud.html

这里的相关负责人的javascript:

$scope.onEdit = function (ix) { 
     $scope.showAdd = false; // hide the add form 
     $scope.editRow = ix; // set the index of the row being edited 
     var currentPerson = $scope.people[ix]; // grab the current person object 
     $scope.model.fname = currentPerson.get('fname'); // update scope fname 
     $scope.model.lname = currentPerson.get('lname'); // update scope lname 
     $scope.model.salutation = currentPerson.get('salutation'); // BUG: this doesn't work and I don't know why, it should set the dropdown to the current salutation. 
     $log.debug('cpsal: ' + currentPerson.get('salutation')); 
     $log.debug('smsal: ' + $scope.model.salutation); 
    }; 

当我看在控制台看到我的$ log.debug()语句的结果,我看到以下内容。

  • cpsal:博士
  • smsal:博士

的控制器这里完整的源代码:https://github.com/arcnovus/learning-parse-angular-patch/blob/master/controllers/crud.js

下拉应该有 “博士”选择。关于如何使这项工作的任何想法?

全部项目位置:https://github.com/arcnovus/learning-parse-angular-patch

+0

您似乎正在过滤掉salutations对象数组中的某些属性。 s(即在称呼中的s)具有除标签之外的什么属性? currentPerson.get(“salutation”)调用是否返回整个称呼对象或仅返回标签? – ruedamanuel

+0

它是一个Parse对象,因此它具有默认的objectId,createdAt,updatedAt和ACL属性以及“label”属性。在这种情况下,尽管重要的是标签。 currentPerson.get(“salutation”)返回一个表示标签的字符串。 –

回答

3

我没有访问您的解析数据,但我嘲笑了一些静态数据,并能获取列表来填充,并在列表中选择合适的项目.. 。

HTML:

 <select data-ng-show="editRow == $index" data-ng-model="model.salutation" class="formControl" data-ng-options="s.label as s.label for s in salutations"> 
      <option value="">--</option> 
    </select> 

数据:

$scope.model = { salutation: 'Mr.', fname: 'Tom', lname: 'Jones' }; // our proxy object for the parse data we are crudding 
$scope.people = [{salutation: 'Mr.', fname: 'Tom',lname: 'Jones'}]; 
$scope.salutations = [{label: 'Dr.'}, {label: 'Mr.'}]; 

检查你设置的$ scope。$ watch函数......它在我的模型中打破了称呼,所以我评论说......当你连接到Parse时,确保没有发生同样的事情。

+0

评论$ watch无济于事。如果您将我的项目指向一个空的Parse App,它会创建一个salutations表,您应该能够看到我所看到的(如果您感兴趣并且拥有Parse帐户)。 由于我可以吐出正确的值,我认为问题在于由于某种原因,绑定没有正确触发。这一点通过我每次绑定发生时记录以及当我点击“编辑”时看不到日志条目这一事实而得到加强。 但是强制$ scope。$ apply()给出[apply already in progress error](http://docs.angularjs.org/error/$rootScope/inprog?p0=%24apply)。 –

+0

没关系,绑定事件_is_开火;我的$ watch在$ scope.salutaion上,但是我被绑定到$ scope.model.salutation,这就是为什么我没有在日志中看到任何东西。回到原点。 –

+0

原来所有我需要做的是从 '改变NG选项指令“s.label对于s的称呼”' 到 '“s.label作为s.label对于s的称呼”' 像@terryt在他的例子中所做的那样。谢谢@terryt !!!! –