我从服务器提供了以下JSON.有了这个,我想创建一个嵌套模型的模型.我不确定实现这一目标的方法.
//json
[{
name : "example",
layout : {
x : 100,
y : 100,
}
}]
Run Code Online (Sandbox Code Playgroud)
我希望这些转换为两个嵌套的骨干模型,具有以下结构:
// structure
Image
Layout
...
Run Code Online (Sandbox Code Playgroud)
所以我定义了Layout模型,如下所示:
var Layout = Backbone.Model.extend({});
Run Code Online (Sandbox Code Playgroud)
但是下面两种(如果有的话)技术中的哪一种应该用于定义Image模型?A或B下面?
一个
var Image = Backbone.Model.extend({
initialize: function() {
this.set({ 'layout' : new Layout(this.get('layout')) })
}
});
Run Code Online (Sandbox Code Playgroud)
或者, B
var Image = Backbone.Model.extend({
initialize: function() {
this.layout = new Layout( this.get('layout') );
}
});
Run Code Online (Sandbox Code Playgroud) 我有一个关于Backbone.js的get和set函数的简单问题.
1)使用下面的代码,我如何直接"获取"或"设置"obj1.myAttribute1?
另一个问题:
2)在Model中,除了defaults对象之外,我可以/应该在哪里声明我的模型的其他属性,以便可以通过Backbone的get和set方法访问它们?
var MyModel = Backbone.Model.extend({
defaults: {
obj1 : {
"myAttribute1" : false,
"myAttribute2" : true,
}
}
})
var MyView = Backbone.View.extend({
myFunc: function(){
console.log(this.model.get("obj1"));
//returns the obj1 object
//but how do I get obj1.myAttribute1 directly so that it returns false?
}
});
Run Code Online (Sandbox Code Playgroud)
我知道我能做到:
this.model.get("obj1").myAttribute1;
Run Code Online (Sandbox Code Playgroud)
但这是好的做法吗?
我的模型已经有了defaults哈希.当视图/页面的某些部分被重置时,我希望将模型重置为其原始默认值.
目前,我明确将每个属性设置为其默认值.有内置的东西或JavaScript/Underscore.js/Backbone.js/jQuery函数,我可以用它来在一个语句中执行此操作吗?
当我{"silent":true}在Backbone模型中设置属性时通过时,为什么不仅仅抑制change:attribute事件?下次更改属性时触发该事件的优点是什么?
更新
Backbone 0.9.10改变了传递的行为{ "silent": true }.来自更改日志:
传递
{silent:true}变化将不再拖延个人"变化:attr"事件,而是完全沉默.
在此处浏览更改日志
我有以下代码,我将更改绑定到单个属性"attribute_1".
var Mine = Backbone.Model.extend({
initialize: function() {
this.bind("change:attribute_1", function() {
console.log('changed!');
});
}
});
Run Code Online (Sandbox Code Playgroud)
如何绑定两个属性?这不起作用:
var Mine = Backbone.Model.extend({
initialize: function() {
this.bind("change:attribute_1, change:attribute_2", function() {
console.log('changed!');
});
}
});
Run Code Online (Sandbox Code Playgroud)
这也不是:
var Mine = Backbone.Model.extend({
initialize: function() {
this.bind("change:attribute_1 change:attribute_2", function() {
console.log('changed!');
});
}
});
Run Code Online (Sandbox Code Playgroud) 所以我正在设置一个具有更新属性的模型.
然后在我看来我正在听这个模型的变化事件.
当那个火我想我应该使用model.changedAttributes?我是否通过回调?
它应该返回所有已更新或新的属性的哈希值?反正知道哪些是更新的,哪些是新的?
一旦我有更改属性的哈希,我该如何进行更新?将对象解析为属性类型,还是应该从get go中使用更高分辨率的侦听器?
谢谢!
我正在将我的骨干版本从0.9.2更新到1.0但我遇到了一个问题.
模型未正确更新.它有延迟.以前我的代码完美无缺:
this.model({ attrib: true},{silent:true});
Run Code Online (Sandbox Code Playgroud)
但更新后我删除了{silent:true},一切都很完美.模型正确更新.
我在Backbonejs.org上读过类似的东西
在变化时传递{silent:true}将不再延迟个别"change:attr"事件,而是完全沉默.
我完全不明白这个陈述的含义.
我有一个使用Backbone.js的基本应用程序,它没有进行PUT调用(更新模型).从前端开始,我调用模型save函数不会进行PUT调用; 但是,如果我用它替换它destroy,它会对后端进行DELETE调用.任何人都知道可能是什么问题?未触发PUT请求的saveTask功能是该功能.
App.Views.Task = Backbone.View.extend({
template: _.template("<label>ID:</label><input type='text' id='taskId' name='id' value='<%= _id %>' disabled /><br><label>Title:</label><input type='text' id='title' name='title' value='<%= title %>' required/><br><label>Content:</label><input type='text' id='content' name='content' value='<%= content %>'/><br><button class='save'>Save</button>"),
events: {
"change input":"change",
"click .save":"saveTask"
},
render: function(eventName){
$(this.el).html(this.template(this.model.toJSON()));
//console.log(this.generateTemplate());
return this;
},
change: function(event){
var target = event.target;
console.log('changing ' + target.id + ' from: ' + target.defaultValue + ' to: ' + target.value);
change[target.name] = target.value;
this.model.set(change);*/
},
saveTask: function(){
this.model.set({
title:$("#title").val(), …Run Code Online (Sandbox Code Playgroud) 我试图从骨干模型中完全删除属性.该模型被发送到一个不太灵活的API,如果我发送我应该发送的属性,它将会中断,所以我需要删除一个属性,使其不再存在.
我试过model.unset,从这个问题,但当我打印出对象时,我正在尝试删除的属性仍然列出,只是值为null.
我需要完全消失该属性.
我的基本结构是:
model.unset("AttrName", "silent");
Run Code Online (Sandbox Code Playgroud) 我在BackboneJS/RequireJS中是n00b,我正在开发一个使用RESTful API的Web应用程序.所以我有一个这样的模型:
车型/ pet.js
define([
'backbone'
], function(Backbone){
var PetModel = Backbone.Model.extend({
urlRoot: 'http://localhost:3000/pet',
idAttribute: '_id',
defaults: {
petId: "",
type: "",
name: "",
picture: "",
description: "",
breed: "",
size: "",
sex: "",
age: "",
adopted: false,
}
});
return PetModel;
});
Run Code Online (Sandbox Code Playgroud)
集合:collections/pets.js
define([
'backbone',
'models/pet'
], function(Backbone, PetModel){
var PetsCollection = Backbone.Collection.extend({
url: 'http://localhost:3000/pets',
model: PetModel,
});
return PetsCollection;
});
Run Code Online (Sandbox Code Playgroud)
并且一个视图呈现一个表单来添加新模型(也许它可能是另一种更优雅的方式) views/petAddNew.js
define([
'jquery',
'backbone',
'models/pet',
'collections/pets',
'text!templates/pet/addNew.html'
], function($, Backbone, PetModel, PetsCollection, petAddNewTemplate){
var PetAddNewView = …Run Code Online (Sandbox Code Playgroud)