backbone 模板 html,backbone.js - Render html table with underscore template engine using a backbone co...

I'm trying to render an html table using underscore template engine. First I have the JSON response from the server like this

{

CurrentModel: {

Heading: "Home",

Id: "pages/193",

Metadata: {

Name: "Home",

Title: null,

Keywords: null,

Description: null,

DisplayInMenu: true,

Published: "/Date(1334499539404)/",

Changed: "/Date(1334499539404)/",

ChangedBy: "Marcus",

IsPublished: true,

IsDeleted: false,

Slug: null,

Url: null,

SortOrder: 0

},

Parent: null,

Children: [

"pages/226",

"pages/257"

]

},

Children: [

{

Heading: "Foo",

MainBody: null,

Id: "pages/226",

Metadata: {

Name: "I'm an article",

Title: null,

Keywords: null,

Description: null,

DisplayInMenu: true,

Published: "/Date(1334511318838)/",

Changed: "/Date(1334511318838)/",

ChangedBy: "Marcus",

IsPublished: true,

IsDeleted: false,

Slug: "i-m-an-article",

Url: "i-m-an-article",

SortOrder: 1

},

Parent: {},

Children: [ ]

},

{

Heading: "Bar",

MainBody: null,

Id: "pages/257",

Metadata: {

Name: "Foo",

Title: null,

Keywords: null,

Description: null,

DisplayInMenu: true,

Published: "/Date(1334953500167)/",

Changed: "/Date(1334953500167)/",

ChangedBy: "Marcus",

IsPublished: true,

IsDeleted: false,

Slug: "foo",

Url: "foo",

SortOrder: 2

},

Parent: {},

Children: [ ]

}

]

}

The HTML result I'm looking for is pretty much like this where i print some of the data from the CurrentModel and the iterate through the Children property, preferably each tr in the the tbody should be a view using backbone.js so I can wire up some events for this particular row.

Page nameSlugPublishedChanged

Now, my question is how should my backbone views and models look like or is it not meant to be used like this? The javasscript code below works and renders a tr for each Children if the response from the server is just a Collection of Page, I understand way but I don't know how to modify the code so it can take a complex model and then render parts of that model in one or maybe two javascript views?

In my application.js I have this code

pages: function () {

this.pageList = new PageCollection();

this.pageListView = new PageListView({ model: this.pageList });

this.pageList.fetch();

}

where PageCollection looks like this

var PageCollection = Backbone.Collection.extend({

url: '/pages',

model: Page

});

the model class like this

Page = Backbone.Model.extend({

metadata: {

name: null,

title: null,

keywords: null,

description: null,

displayInMenu: null,

published: null,

changed: null,

changedBy: null,

isPublished: null,

isDeleted: null,

slug: null,

url: null,

sortOrder: null

},

parent: {},

children: [],

ancestors: null,

initialize: function () { }

});

the PageListView

PageListView = Backbone.View.extend({

tagName: 'table',

initialize: function () {

this.model.bind("reset", this.render, this);

},

render: function (eventName) {

_.each(this.model.models, function (page) {

$(this.el).append(new PageListItemView({ model: page }).render().el);

}, this);

return this;

}

});

and at last the PageListItemView

PageListItemView = Backbone.View.extend({

tagName: "tr",

template: _.template($('#tpl-page-list-item').html()),

events: {

"click td input[type=checkbox]": "publish"

},

render: function (eventName) {

$(this.el).html(this.template(this.model.toJSON()));

return this;

},

publish: function (event) {

alert('Publish');

}

});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值