- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在做什么:
我正在创建一个示例应用程序,展示如何使用 Rails 3 作为 JSON 服务器将 Kendo UI 控件与 Backbone.js 合并。
到目前为止,我有管理 erb 文件中模板的主干 View 和管理 View 本身的主干路由器 - 取决于单击的链接。
完成后,我想将其作为教程提供给那些想要进入 Backbone 和 KendoUI(这也非常酷)的人。
问题:
Kendo 网格不通过 Users View 渲染方法进行渲染 - 尽管它的容器模板是这样的。
现在,我必须在路由器渲染用户 View 之后从路由器的 Users 方法渲染网格。
模板呈现,但网格不呈现,这似乎很奇怪 - 或者我错过了什么?
也许看到代码会更容易理解:
index.html.erb
<h1>Kendo Grid Test</h1>
<div id="nav"></div>
<div id="container">
<!-- The templates below will be placed here dynamically -->
</div>
<!-- TEMPLATES -->
<script type="text/template" id="users-grid-template">
<p>Users Grid Template</p>
<div id="users-grid"></div>
</script>
<script type="text/template" id="posts-grid-template">
<div id="posts-grid"></div>
</script>
<script type="text/template" id="nav-template">
<div>
<ul id="nav_container">
<li><a href="#users">Users</a></li>
<li><a href="#posts">Posts</a></li>
</ul>
</div>
</script>
Backbone 用户查看
window.UsersView = Backbone.View.extend({
initialize: function() {
_.bindAll(this, "render");
this.usersGrid = _.template($("#users-grid-template").html());
this.render().el;
},
render: function() {
$(this.el).html(this.usersGrid).fadeIn();
return this;
}
});
Backbone 路由器
window.AppRouter = Backbone.Router.extend({
routes: {
'users': 'users',
'posts': 'posts'
},
initialize: function() {
this.usersView = new UsersView;
},
posts: function() {
var container = $("#container");
container.empty();
},
users: function() {
var container = $("#container");
container.empty();
container.append(this.usersView.render().el);
var UsersData = new kendo.data.DataSource({
transport: {
read: {
url: "/users",
dataType: "json"
}
}
});
var grid = $("#users-grid").kendoGrid({
dataSource: UsersData,
columns: [
{
field: "first_name",
title: "First Name"
},
{
field: "last_name",
title: "Last Name",
}]
});
container.append(grid);
}
});
window.App = new AppRouter();
Backbone.history.start();
如您所见,Kendo UI 网格是动态生成的并放置在 <div id="users-grid"></div>
中“用户网格模板”的。但是,我必须执行单独的“附加”方法才能将网格放入模板中。这似乎没有必要。
看来我应该能够放置所有这些......
...在 UsersView Render 方法内部 - 无需使用追加方法。但我无法让它发挥作用。
关于如何构建它有什么建议吗?或者我当前的代码结构是否正确?
非常感谢您的建议!
<小时/>编辑 - 简化的解决方案(感谢 Derick)
我意识到我把这件事过于复杂化了。我试图使用 Backbone 来做 Kendo 已经在做的事情 - 管理其网格和数据源。
由于 Backbone 是如此模块化,而我目前真正需要的只是它的路由器,因此我删除了所有 View (导航 View 除外),只使用路由器并让 Kendo 完成它的工作。
我认为该解决方案更简单且更易于管理代码。 (至少对我来说)
$(document).ready(function(){
window.Navigation = Backbone.View.extend({
el: $("#nav"),
initialize: function() {
_.bindAll(this, "render");
this.nav = $("#nav-template").html();
this.render().el;
},
render: function() {
$(this.el).html(this.nav);
return this;
}
});
window.nav = new Navigation;
window.AppRouter = Backbone.Router.extend({
routes: {
'users': 'users',
'posts': 'posts'
},
initialize: function() {
var container = $("#container");
//container.html("#users-grid");
},
posts: function() {
var container = $("#container");
container.empty();
},
users: function() {
var container = $("#container");
usersTemplate = _.template($("#users-grid-template").html());
container.empty();
container.html(usersTemplate);
var UsersData = new kendo.data.DataSource({
transport: {
read: {
url: "/users",
dataType: "json"
}
}
});
$("#users-grid").kendoGrid({
dataSource: UsersData,
columns: [
{
field: "first_name",
title: "First Name"
},
{
field: "last_name",
title: "Last Name",
}]
});
}
});
window.App = new AppRouter();
Backbone.history.start();
// Closing jquery tag
});
希望有人会发现这很有用。
下一步 - 对此应用 CRUD。
最佳答案
该问题是由于尝试调用 .kendoGrid
时缺乏选择器范围造成的。将内容填充到 el.html(...)
中不会将 View 的 el
附加到 DOM,因此调用 $("# users-grid")
还没有找到任何内容。
您仍然可以在 View 的 el 上调用 kendoGrid
,但您必须将“#user-grid”选择器的范围限制在 View 上才能执行此操作:
Backbone.View.extend({
render: function(){
this.$el.html(this.usersGrid);
this.$("#user-grid").kendoGrid({
// kendo grid options here
});
}
});
在 View 上将 this.$
作为函数调用是 View 上的快捷方法,以使用 el
作为 jquery 选择器的上下文。与调用 this.$el.find("#users-grid")
FWIW:这些天我经常使用 Kendo,并且喜欢使用 Backbone。我还没有遇到过需要在 View 的渲染方法之外进行任何真正特殊处理的 Kendo 控件。
关于jquery - Backbone.js + KendoUI - 使用网格进行路由、 View 和结构化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9218448/
我有要在 KendoUI 网格中显示的数据。有一些 bool 数据,我希望它显示为复选框。此外,当用户单击复选框时,我需要做一些事情,所以我需要每一行数据的 onclick 事件。如何在 KendoU
我有 2 Kendo Treeview; 1 没有复选框,另一个 1 带有复选框 like example here 。 假设我想禁用第二个 Treeview 上的某些节点,当我选择第一个 Treev
removeTask 方法会弹出一个窗口,询问我是否确定要删除该任务, 这确实使得通过编程删除任务变得困难, 有人找到了我没有想到的方法(不改变剑道的代码)吗? 谢谢, 最佳答案 找到了我要找的东西,
收到未捕获错误:模板无效:来自此 kendoui 模板。我在这里缺少什么? ${DisplayText} 我想设置单选按钮来检查 Json 对象的 IsActive 属性是否为 true..
我通过 API 获取 JSON 数据并使用 Kendo UI 将其显示在表格中。 $scope.ReportViewGrid = function ReportViewGrid(jsonData) {
我正在尝试按两个字段对数据源进行分组,并获取它们值的平均值或总和。但即使我在数据源中指定了组和聚合属性,我也无法获取它。 代码如下: var dataSource = new kendo.data.D
我正在创建这样的 KendoUI 模板: Flows in action
我有一个 JSON 数据结构,需要在 Kendo UI 网格中显示。数据是这样的 [ {"ObjType": {"Key1":"Value1", "Key2":"Value2", "Key3":["1
使用下面的示例,x 轴系列并非从相同的 x 值开始。 x 轴将在中途从 0 重新开始。 function createChart() { $("#chart").kendoChart({
我在对 kendoUI 网格的日期时间进行排序时遇到问题,请参阅 my grid snapshot ,日期排序正确(从最近的日期时间排序),但时间不正确,其中“Jul/08/2016 15:04:22
有没有办法在运行时在 KendoUI 网格列中创建不同类型的控件?场景是,我的网格中有 2 列。第一列显示一个下拉列表,其中包含一些字符串,例如“名称”、“开始日期”等。当用户从中选择一个值时,我想在
我正在使用包含在 中的 KendoUI 自动完成功能。如果在自动完成选项打开时按 Enter 键,则 Enter 键只会关闭选项,并且您必须再次按 Enter 键才能提交表单。监听输入上的按键来检查
下面我有一个 kendoUI 网格,它从服务器获取数据。然后,用户可以编辑网格中的两列。我有一个单独的按钮,可以将数据发送回服务器,并且我不使用剑道网格的 UPDATE 传输来执行此操作。我遇到的问题
在 Kendo UI 中,是否可以使用图标而不是按钮来执行 KendGrid 中的自定义命令?我需要这个,因为按钮似乎有一个最小宽度,这对我的页面来说太大了。即使我指定宽度它也不会减少。 co
我正在使用 KendoUI Grid 在启用 KnockoutJS MVVM 的应用程序中显示我的数据。由于 MVVM 是客户端的架构,我正在维护一个 knockoutjs observerble 数
在我的剑道网格中,我想更改过滤器中的日期格式 Ex: 1/30/2015 to Jan 30, 2015 我已经更改了 Start Date 的日期格式 field:
我正在尝试使用 JSON 数据填充 KendoUI 网格,其中服务器返回总行数以及数据,但是我在让 serverPaging 正常工作时遇到了一些问题。我创建并分配网格的数据源如下:
我正在尝试使用 kendo ui 在堆叠图中显示数据。这是我的代码: var data = [ // June { Start: "2014-06-01T00:00:00", Name
有什么方法可以连接 KendoUI 可拖动项以添加到 KendoUI 可排序列表中,例如此处的 jQueryUI:http://jqueryui.com/draggable/#sortable .我为
我有一个 kenodui Treeview ,我试图扩展顶级节点,如果它们具有以下值:“事件”或“关闭”,其余节点可以保持关闭状态。我使用以下代码来创建我的 Treeview : if (CI.Pop
我是一名优秀的程序员,十分优秀!