Kendo UI Treeview と ASP.Net MVC TO ASP.Net MVC SPA (デュランダル + ブリーズ) を使用して、非常に単純なサンプルを移動しています。剣道 UI + ASP.NET MVC の使用は非常に単純です。これは、クライアント側で次のような構文を使用するだけでよいためです。
jQuery(function () {
jQuery("#treeview").kendoTreeView({
"dataSource":{
"transport":{
"prefix": "",
"read":{"url": "http://localhost:49729//treeview/operations"}
},
"schema":{"errors": "Errors"}},
"dataTextField": "Name"
}
);});
そして、私のコントローラーでは次のようなものを使用します:
public JsonResult Operations(int? id)
{
var manager = new OperationUnitManager();
var objects = from o in manager.GetList()
where (id.HasValue ? o.ParentId == id : o.ParentId == null)
select new
{
id = o.Id,
Name = o.Name,
hasChildren = o.HasChildren
};
return Json(objects, JsonRequestBehavior.AllowGet);
}
とても簡単です!TreeViewControl は、LoadOnDemand=true を使用してサービスからデータを取得します。これにより、コントロールは選択されたツリー ノードの ID を取得し、すべての子ノードを取得するために Operation メソッドを呼び出します。とても簡単です!
今、mvvm パターンとそよ風 ( https://github.com/jstott/breeze-kendoに基づく)を使用して同じコントロールを使用したい場合、コントロールは機能しません..「読み込み中..」というメッセージが表示されるだけです。ビューモデルに使用しているコードは次のとおりです。
define(['services/logger', 'services/datacontext'], function (logger, datacontext) {
var vm = function () {
var self = this;
this.activate = function () {
logger.log('Organisation View Activated', null, 'Organisation', true);
return true;
};
this.viewAttached = function (view) {
logger.log('viewAttached', this.title, 'Organisation', true);
$('#treeView').kendoTreeView(this.treeViewOptions);
};
this.datacontext = datacontext;
this.title = 'Organisation View';
this.treeViewOptions = {
dataTextField: 'Description',
dataSource: new kendo.data.extensions.BreezeDataSource({
entityManager: self.datacontext.manager,
endPoint: "TreeObjects"
})
};
};
return vm;
});
景色:
<section>
<h2 class="page-title" data-bind="text: title"></h2>
<div id="treeView"></div>
</section>
コントローラー (Breeze を使用):
[HttpGet]
public String Metadata()
{
return _contextProvider.Metadata();
}
[HttpGet]
public IQueryable<TreeNode> TreeObjects()
{
var repository = new OrganisationRepository(_contextProvider.Context);
var username = "AnyUser";
var treeNodes= repository.GetTreeNodes(username);
return treeNodes.AsQueryable();
}
最初の 2 つのコード ブロックを見ると、ツリー内のツリー ノードが展開されるたびにサーバー メソッドが呼び出されます (パラメーターとして id を使用)。しかし、微風の場合、ノードが展開されるたびにクエリをjsコードで作成する必要があります...そして、それを機能させる方法がわかりません。それを解決する方法はありますか?
どんなアドバイスでも大歓迎です!