询问Salesforce中的Javascript远程处理
我正在尝试在Salesforce中使用JavaScript远程处理。我有一个文本框,输入要查找的城市名称。第一次单击搜索按钮时,我得到了正确的结果,但另一次单击时,我得到了许多重复的列。我不知道我哪里出错了。请帮帮我。这是我的密码: 控制器类:询问Salesforce中的Javascript远程处理,javascript,salesforce,remoting,Javascript,Salesforce,Remoting,我正在尝试在Salesforce中使用JavaScript远程处理。我有一个文本框,输入要查找的城市名称。第一次单击搜索按钮时,我得到了正确的结果,但另一次单击时,我得到了许多重复的列。我不知道我哪里出错了。请帮帮我。这是我的密码: 控制器类: global with sharing class AccountRemoter { public static List<Account> account { get; set; } public AccountRemote
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>
global与共享类AccountRemoter{
公共静态列表帐户{get;set;}
public AccountRemoter(){}
@远程操作
全局静态列表getAccount(字符串cityName){
account=[选择Id、名称、城市名称、RecordTypeId、RecordType.Name FROM account WHERE City\uuuu c=:cityName];
返回帐户;
}
}
可视页面:
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>
var VM=函数(){
var self=这个;
self.items=ko.observearray();
self.columnNames=ko.computed(函数(){
if(self.items().length==0)
返回[];
var-props=[];
var obj=self.items()[0];
for(obj中的变量名称)
道具推(名称);
返回道具;
});
};
函数getRemoteAccount(){
var cityName=document.getElementById('acctSearch').value;
Visualforce.remoting.Manager.invokeAction(
“{!$RemoteAction.AccountRemoter.getAccount}”,cityName,函数(结果,事件){
如果(事件状态){
var vm=新vm();
ko.应用绑定(vm);
//vm.items.removeAll();
对于(变量i=0;i \n”+event.where+”;
}否则{
document.getElementById(“responseErrors”).innerHTML=event.message;
}
},
{escape:true}
);
}
搜寻
尝试self.items.removeAll()
在applyBindings()之前
谢谢你的回复,我试过了,但没有成功:var vm=new vm();vm.items.removeAll();ko.应用绑定(vm);每次单击“查找”按钮时,都必须清除VM对象。