2014-06-23 40 views
0

我正嘗試在Salesforce中使用JavaScript遠程處理。我有一個輸入城市名稱的文本框。第一次點擊搜索按鈕我得到了正確的結果,但是當我再次點擊它時,我得到了許多重複的列。我不知道我出錯的地方。請幫幫我。這裏是我的代碼:詢問Salesforce中的Javascript遠程處理

控制器類:

global with sharing class AccountRemoter { 
    public static List<Account> account { get; set; } 
    public AccountRemoter() { } 

    @RemoteAction 
    global static List<Account> getAccount(String cityName) { 
     account = [SELECT Id, Name, City__c, RecordTypeId, RecordType.Name FROM Account WHERE City__c = :cityName]; 
     return account; 
    } 
} 

視覺頁:

<apex:page controller="AccountRemoter"> 

    <apex:includeScript value="{!$Resource.knockout}"/> 
    <apex:includeScript value="{!URLFOR($Resource.kendo, '/js/jquery.min.js')}"/> 

    <script type="text/javascript"> 
      var VM = function() { 
       var self = this; 
       self.items = ko.observableArray(); 

       self.columnNames = ko.computed(function() { 
        if (self.items().length === 0) 
         return []; 
        var props = []; 
        var obj = self.items()[0]; 

        for (var name in obj) 
         props.push(name); 
        return props; 
       }); 
      }; 

     function getRemoteAccount() { 
      var cityName = document.getElementById('acctSearch').value; 

      Visualforce.remoting.Manager.invokeAction(
       '{!$RemoteAction.AccountRemoter.getAccount}', cityName, function(result, event){ 
        if (event.status) { 


         var vm = new VM(); 

         ko.applyBindings(vm); 

         //vm.items.removeAll(); 

         for (var i = 0; i < result.length; i++){ 
          vm.items.push({         
           'Name': result[i].Name, 
           'City': result[i].City__c 
          }); 
         } 

        } else if (event.type === 'exception') { 
         document.getElementById("responseErrors").innerHTML = event.message + "<br/>\n<pre>" + event.where + "</pre>"; 
        } else { 
         document.getElementById("responseErrors").innerHTML = event.message; 
        } 
       }, 
       {escape: true} 
      ); 
     } 
    </script> 

    <input id="acctSearch" type="text"/> 
    <button onclick="getRemoteAccount()">Search</button> 
    <div id="responseErrors"></div> 


    <div id="dv"> 
    <table style="float:left;" Id="mytable"> 
     <thead > 
      <tr data-bind="foreach: columnNames" > 
       <th> <span data-bind="text: $data"></span> 
       </th> 
      </tr> 
     </thead> 

     <tbody data-bind="foreach: items"> 
      <tr data-bind="foreach: $parent.columnNames"> 
       <td data-bind="text: $parent[$data]"></td> 
      </tr> 
     </tbody> 
    </table> 
    </div> 

</apex:page> 

回答

-1

嘗試self.items.removeAll();applyBindings()

+0

感謝您的回覆,我嘗試,但它確實不工作: var vm = new VM(); vm.items.removeAll(); ko.applyBindings(vm); – user3767018

+0

每次單擊查找按鈕時,都必須清除VM對象。 – MrWaqasAhmed