[英]How to reuse kendo ui remote binding datasource (change transport.read.data then refresh)
我想问问是否可以重用远程绑定kendo.data.Datasource
而不是使用新参数创建新的绑定。
我的情况是我有一个搜索框和一个列表视图。 用户输入搜索框时,带有搜索框值参数的请求将发送到服务器。 我可以通过在每个keyup
事件中创建新的kendo.data.Datasource
来使其正常工作,但是内存成为我的关注点。
var viewModel = kendo.observable({ searchId: "", // searchbox value searchResult: null, // search result listview datasource searchFnc: function() { // search function // QUESTION: is there any way to update the current datasource object // to refresh the list view instead of create new object? // something like: // this.set("searchResult.options.transport.read.data.postId", this.get("searchId")); this.set("searchResult", new kendo.data.DataSource({ transport: { read: { url: "http://jsonplaceholder.typicode.com/comments", dataType: "jsonp", data: { postId: this.get("searchId") } } } })); } }); kendo.bind($("#myView"), viewModel);
.item { list-style: none; } .item span { display: inline-block; min-width: 40px; } #myListView { min-height: 50px; }
<link href="https://kendo.cdn.telerik.com/2016.1.112/styles/kendo.common.min.css" rel="stylesheet" /> <link href="https://kendo.cdn.telerik.com/2016.1.112/styles/kendo.default.min.css" rel="stylesheet" /> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script src="https://kendo.cdn.telerik.com/2016.1.112/js/kendo.all.min.js"></script> <div id="myView"> <label>Enter Post ID (1,2,3,4...) <label> <br/> <span class="k-textbox k-space-right"> <input type="text" data-value-update="keyup" data-bind="value: searchId, events: {keyup: searchFnc}"/> <a href="javascript:;" class="k-icon ki-search" data-bind="click: searchFnc"> </a> </span> <ul id="myListView" data-role="listview" data-bind="source: searchResult" data-template="template-search-result"> </ul> </div> <script type="text/x-kendo-template" id="template-search-result"> <li class="item"> <span>#: postId #</span> <span>#: id #</span> <span>#: name #</span> </li> </script>
那这个呢? change-datasource-url-grid 。 它使用的功能类似于options.transport.read.url
的功能( options.transport.read.url
)。 然后用.refresh()
更新。
这就是我会做拨弄
var viewModel = kendo.observable({
searchId: 1,
searchResult: new kendo.data.DataSource({
transport: {
read: {
url: function() {
return "https://jsonplaceholder.typicode.com/" + viewModel.get("searchId") + "/comments"
},
dataType: "jsonp"
}
}
}),
searchFnc: function() {
this.searchResult.read();
}
});
kendo.bind($("#myView"), viewModel);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.