- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Backbone.js 来简化数据 (JSON) 管理以及与 DOM 的交互。
首先,我不确定 Backbone.js 是否真的可以简化和改进当前流程,但我想假设它可以。
之前我使用 jQuery AJAX 函数检索数据。现在,我正在将数据(仍然使用 AJAX)Backbone 样式检索到 Backbone 模型中。
对于更新,之前我通过解析 JSON 对象本身来更新数据。然后我会将更新后的 json 发送回后端(就像我收到它一样)。
现在,是否可以使用 Backbone 中的 set 函数来简化类似下面的内容,理想情况下应该在哪里构造 set 属性行为(以及所有其他 UI 绑定(bind),如更改事件)?它会在 View 初始化程序中的 fetch() 成功处理程序上吗?
function setBucketOffer(bucketName, newId) {
var segments = json.segments;
for (var i = 0; i < segments.length; i++) {
if (segments[i].market.toLowerCase() === g_market) {
var genders = segments[i].gender;
for (var i = 0; i < genders.length; i++) {
if (genders[i].name.toLowerCase() === g_segment) {
var buckets = genders[i].buckets;
for (var i = 0; i < buckets.length; i++) {
if (buckets[i].name === bucketName) {
buckets[i].confirm = newId;
return;
}
}
}
}
}
}
}
示例 JSON
{
"segments": [
{
"market": "Market1",
"gender": [
{
"name": "male",
"buckets": [
{
"name": "Market1_M_CBD",
"subscribers": "50,000",
"postcode": "20000-2010",
"lastsend": "13/03/12 4:30PM",
"suggest": "10054",
"confirm": ""
},
{
"name": "Market1_M_North",
"subscribers": "50,000",
"postcode": "20000-2010",
"lastsend": "13/03/12 4:30PM",
"suggest": "10054",
"confirm": ""
}
]
},
{
"name": "female",
"buckets": [
{
"name": "Market1_F_CBD",
"subscribers": "50,000",
"postcode": "20000-2010",
"lastsend": "13/03/12 4:30PM",
"suggest": "10054",
"confirm": "10054"
}
]
}
]
},
{
"market": "Market2",
"gender": [
{
"name": "male",
"buckets": [
{
"name": "Market2_M_CBD",
"subscribers": "50,000",
"postcode": "20000-2010",
"lastsend": "13/03/12 4:30PM",
"suggest": "10054",
"confirm": "10054"
},
{
"name": "Market2_M_North",
"subscribers": "50,000",
"postcode": "20000-2010",
"lastsend": "13/03/12 4:30PM",
"suggest": "10054",
"confirm": "10054"
},
{
"name": "Market2_M_South",
"subscribers": "50,000",
"postcode": "20000-2010",
"lastsend": "13/03/12 4:30PM",
"suggest": "10054",
"confirm": "10054"
}
]
}
]
}
]
}
编辑 1
从这里开始,我尝试充分利用 Parse 并从我的 JSON 中获取片段:
var Offers = Backbone.Collection.extend({
url: 'URL',
parse: function (response) {
return response.segments;
}
});
在这里,我得到的不仅仅是 response.segments。也不确定我是否适合使用渲染函数或获取成功函数来填充 DOM。假设我在 DOM 中有我的 html 模板......我想使用 jQuery clone() 克隆它并使用段上的 forEach 填充克隆,然后将所有克隆推回到 html 主体中。这在 Backbone 中可行吗,你会怎么做? (我可以在没有 backbone.js 的情况下做到这一点,但我想看看如何使用 backbone.js 进行改进,并将克隆上的所有数据绑定(bind)到模型更改)
var OfferView = Backbone.View.extend({
initialize: function () {
this.model = new Offers();
this.model.fetch({
success: function (collection, response) {
console.log(response);
}
});
this.model.on('change', this.modelChange);
this.model.on('change', this.render);
this.modelChange = function () {
alert('model changed');
};
},
render: function () {
}
});
编辑2
我正准备通过 forEach 创建单独的 View ,但在将这些 View 插入回 DOM 时遇到了问题。我究竟做错了什么? (不确定返回这部分)
// DEFINE VIEW
var OfferView = Backbone.View.extend({
initialize: function () {
this.model = new Offers();
this.model.fetch();
this.model.on('change', this.modelChange);
this.model.on('change', this.render);
this.modelChange = function () {
alert('model changed');
};
this.render();
},
render: function () {
var self = this;
this.model.forEach(function (s) {
var view = new OfferMarketView({
id: "container" + s.get('name').toLowerCase().replace(/\s*/g, '')
});
$('#leftCol').append(view.el);
});
return this;
}
});
var OfferMarketView = Backbone.View.extend({
tagName: "div",
className: "marketContainer",
events: {},
render: function() {
}
});
最佳答案
每当您在模型上调用 fetch 时,响应都会通过可以在您的模型中定义的 parse
方法传递。 parse
接受一个参数,ajax 响应:
parse: function(response) {
}
在该函数中,您可以对从 ajax 请求返回的数据做任何您想做的事情,并最终返回该对象。 parse 方法返回的对象将在您的模型上设置。
对于事件绑定(bind),您需要在 View 中进行。在 View 的初始化方法中,您可以执行以下操作:
this.collection.on("change", this.someFunction);
现在,任何时候任何时候导致该模型触发其更改事件 someFunction
(也在您的 View 中定义)都会运行。
编辑
您添加到问题中的示例 json 看起来非常规范化。有了这些数据,我会把它提取到一个集合中。如果那是您希望模型看起来像的结构,那么您不需要做太多解析。
如果您创建一个执行以下操作的解析方法,则在您的集合文件中:
parse: function(response) {
return response.segments;
}
当您在成功请求时调用您的提取 this.collection.fetch()
时,您的集合将充满模型,这些模型包含与您的响应匹配的结构中的属性。
编辑 2
您的绑定(bind)看起来没问题。
在这段代码中:
this.collection.fetch({
success: function (model, attributes) {
initAll(attributes);
// populate ui with attributes from model
}
})
集合获取成功时传回的参数是 (collection, response)
collection
是集合调用的结果,this. collection
将最终成为。 response
是您的 ajax 请求的响应。
我不确定 initAll(attributes)
应该做什么。如果您像我在上面发布的那样添加一个解析方法,您的集合将包含一组具有每个段属性的模型。
此外,您可以将渲染绑定(bind)到更改事件,而不是在最后调用 this.render()
:
this.collection.on('change', this.render);
这样,每当您的收藏发生变化时,该 View 将自动再次呈现,以便您的更改显示出来。
关于javascript - 使用 Backbone.js 设置我的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9798036/
我有一个主 View 负责呈现其他 View ...... 这是完整的代码 (1) (2) (3)。 当我第一次加载 View (View1、View2、View3)时,一切正常。 然后,如果我尝试重
我正在第一次尝试使用 Backbone.Marionette,并想知道当一个简单的 Backbone.View 就足够了时,是否有任何理由使用 Backbone.Marionette.ItemView
我正在尝试将 Backbone Validation 与 Backbone Stickit 结合使用,我希望在用户输入时一次验证一个属性。但是,当用户输入一个值时,模型上的所有属性都会得到验证,而不仅
我在结合使用 T. Hedersen 的 backbone.validation 插件 ( https://github.com/thedersen/backbone.validation ) 和 D
在下面编辑了这个 在下图中,我有两个主要区域。 左边的用户列表:allusersRegion 另一个用于显示布局的右侧,其中包含在 allusersRegion 中单击的用户的唯一属性和用户的文章列表
如果您单击链接,我的主干路由器工作正常,但在尝试直接访问 URL 或刷新页面时不起作用。 路由器 var app = app || {}; var appRouter = Backbone.Route
我想创建一个 Backbone 模型并将另一个模型的集合存储到它的属性中。所以,有父子模型。每个父级都有一个或多个子级存储在其属性中的数组中。 JSON 将是这样的。 Parent = { n
我正在使用 Backbone 和木偶, 我想对我的收藏和渲染 View 进行排序。 但是发生了一些奇怪的事情。 '/api/note/getList' ,它返回(并在集合被 View 初始化时调用)
我有一个相当通用的模型,并且正在收集该模型(请参见下文),作为一系列观点的基础。在几种 View 上,选择一个模型会生成操作(通过“selected”属性),我需要能够仅在客户端跟踪选择。 但是,似乎
这是一个单一的问题,但我对这是否是一个好习惯这一事实深有感触。 基本上,假设我们有这个微不足道的场景: (function(){ window.App = { Models: {},
我正在使用 Signalr 集线器订阅服务器上的事件。将什么事件分派(dispatch)到集线器,它成功地将项目添加到 Marionette CollectionView。反过来,这会呈现到表格中。
我正在使用 require js 和 Backbone 为 android 开发应用程序。我必须通过 touchend 事件将从集合中获取的模型传递给路由器。我该怎么做? define(["jquer
我有一个 Backbone 集合。如何对集合进行切片,或者至少将列表截断为特定长度? 最佳答案 假设您已经定义并初始化了您的集合,并且您想要改变集合(就地更改),您必须执行以下操作: collecti
我有一个集合,其中有一个添加模型时会触发的事件。我已经在文档中阅读了应该具有options参数但无法获取的参数。 我基本上想在集合中找到模型所在的索引。 在我的收藏夹中,我有这个。 initi
从集合中删除模型时,如何获取模型的索引。 在下面的代码中有一个回调函数 doSomething(){} ,它在 remove 被触发时被调用,我希望索引在那里。 Backbone 文档说“移除前模型的
在项目中同时使用Polymer和Backbone是否有任何限制? 我想不出什么具体的东西,但我想我会在匆忙之前先问清楚。有人可能已经同他们一起工作过,并且发现了某种不兼容之处。 欢迎任何反馈和经验分享
我正在使用bone.js编写应用程序,并在页面之间进行动画处理(有点像iPhone风格的ui)。因此,当您单击按钮时,下一页将从右侧滑入,而单击后退按钮将使下一页从左侧滑入。我希望能够使用路由器对浏览
我刚刚开始学习ribs.js。我在理解如何/何时使用模型和集合时遇到问题。我在网上找到了几个教程,每个教程都使用不同的方法来构建应用程序。在某些情况下,是从Collection对象的REST API中
我有一个由 REST API 给出的模型,其中一个名称的属性是这样的: defaults: { ... "user-name" : "", ... } 然后当我尝试通过这种方式在模板中呈现它时: U
我有一个 Backbone 应用程序,它从我使用 Backbone 的代码中的不同位置不确定地获取错误 Backbone is not defined 。有时它会先加载然后加载网站,有时则不会。我将以
我是一名优秀的程序员,十分优秀!