2016-09-20 10 views
0

Salesforceを更新する際に問題があります。 イベントブラーでは、テーブルセルの新しい結果が必要で、角度コントローラーに渡してから、salesforceで連絡先を更新します。監視なしでは、選択されたオブジェクトをエラーなしでリモートアクションに渡しますが、編集されたフィールドではなく初期のものです。私はこの記事http://blogs.microsoft.co.il/choroshin/2014/03/26/angularjs-watch-for-changes-in-specific-object-property/を参考にして時計を追加しようとしましたが、 "$ scope.ContactData.mapは関数ではありません"というエラーが表示されます。角度コントローラの可変パラメータを見る方法

マイ角度コントローラ

var app = angular.module('MyApp',[]); 

app.controller('myController',function($scope,VFRemotingFactory){ 
    $scope.mcm = {}; 

    VFRemotingFactory.getData().then(
     function(result){ 
      $scope.ContactData = result; 
     } 
    ); 

    $scope.$watch(function($scope) { 
         return $scope.ContactData.map(function(obj) { 
          return obj.FirstName 
         }); 
        }, 
        function (newVal) {}, 
        true); 

    $scope.orderByMe = function(x) { 
     $scope.myOrderBy = x; 
    } 

    $scope.editMe = function (obj) { 
     obj.target.setAttribute("contenteditable", true); 
     obj.target.focus(); 
    } 

    $scope.NotEditMe = function (obj, contact){ 
     obj.target.setAttribute("contenteditable", false); 
     UpdateContact(contact); 

}); 

app.factory('VFRemotingFactory',function($q,$rootScope){ 
    var factory = {}; 
    factory.getData = function(searchText){ 
     var deferred = $q.defer(); 
     GetAllContactsByFilter(function(result){ 
      $rootScope.$apply(function(){ 
       deferred.resolve(result); 
      }); 
     }, searchText); 
     return deferred.promise; 
    } 
    return factory; 
}); 

function GetAllContactsByFilter(callback, searchText){ 
    if(searchText == undefined){ 
     searchText = ''; 
    } 
    Visualforce.remoting.Manager.invokeAction('{!$RemoteAction.ContactsController.GetAllContactsByFilter}', 
               searchText, 
               callback, 
               {escape: false} 
              );  
} 

function UpdateContact(Contact){ 
    Visualforce.remoting.Manager.invokeAction('{!$RemoteAction.ContactsController.UpdateContact}', 
               Contact, 
               function(result,event){}, 
               {escape: false} 
              );  
} 
</script> 

マイページ

<tr ng-repeat="contactVar in ContactData | orderBy:myOrderBy | filter:mcm.searchText"/> 
<td contenteditable="false" ng-dblclick="editMe($event)" ng-blur="NotEditMe($event,contactVar)"> {{contactVar.FirstName}}</td> 
<td contenteditable="false" ng-dblclick="editMe($event)" ng-blur="NotEditMe($event,contactVar)"> {{contactVar.LastName}}</td> 
<td contenteditable="false" ng-dblclick="editMe($event)" ng-blur="NotEditMe($event,contactVar)"> {{contactVar.Phone}}</td> 

そして、私のリモートコントローラー

public class ContactsController { 
@RemoteAction 
public static List<Contact> GetAllContactsByFilter(String searchText){ 
    String searchString = '%' + searchText + '%'; 
    List<Contact> contactList = [SELECT FirstName, LastName, Phone, Email, Title, Account.Name FROM Contact]; 
    return contactList; 
} 

@RemoteAction 
public static void UpdateContact(String contact){ 
    System.debug(contact); 
    Contact contactForUpdate = new Contact(); 
    contactForUpdate.FirstName = contact.substringBetween('FirstName=', ','); 
    contactForUpdate.LastName = contact.substringBetween('LastName=', ','); 
    contactForUpdate.Phone = contact.substringBetween('Phone=', ','); 
} 
} 
+0

可能な重複http://stackoverflow.com/questions/11703477/pass-variables-to-angularjs-controller-best -練習) –

答えて

0

私はフィドルに簡略化を行っています。 thisを確認してください。

var app = angular.module('MyApp', []); 
 

 
app.controller('myController', ['$scope', function($scope) { 
 

 
    $scope.mcm = {}; 
 
    $scope.ContactData = [{ 
 
    Id: 1, 
 
    FirstName: 'ABC' 
 
    }, { 
 
    Id: 2, 
 
    FirstName: 'DEF' 
 
    }] 
 

 

 
    $scope.orderByMe = function(x) { 
 
    $scope.myOrderBy = x; 
 
    } 
 

 
    $scope.editMe = function(obj) { 
 
    obj.target.setAttribute("contenteditable", true); 
 
    obj.target.focus(); 
 
    } 
 

 
    $scope.NotEditMe = function(obj, contact) { 
 
    obj.target.setAttribute("contenteditable", false); 
 
    console.log(contact.Id); 
 
    console.log(contact.FirstName); 
 
    } 
 
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<body ng-app="MyApp"> 
 
    <div ng-controller="myController"> 
 
    <table> 
 
     <tr ng-repeat="contactVar in ContactData"> 
 
     <td contenteditable="false" ng-dblclick="editMe($event)" ng-mouseleave="NotEditMe($event,contactVar)"> {{contactVar.FirstName}}</td> 
 
     </tr> 
 
    </table> 
 

 
    </div> 
 
</body>

[AngularJSコントローラ、ベストプラクティスに変数を渡す?](の
関連する問題