标签: backbone-model

Backbone.js中的嵌套模型,如何处理

我从服务器提供了以下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)

javascript backbone.js backbone-model

116
推荐指数
7
解决办法
5万
查看次数

Backbone.js获取并设置嵌套对象属性

我有一个关于Backbone.js的getset函数的简单问题.

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)

但这是好的做法吗?

javascript backbone.js backbone-model

105
推荐指数
4
解决办法
8万
查看次数

将Backbone的模型重置为初始默认值的最简单方法是什么?

我的模型已经有了defaults哈希.当视图/页面的某些部分被重置时,我希望将模型重置为其原始默认值.

目前,我明确将每个属性设置为其默认值.有内置的东西或JavaScript/Underscore.js/Backbone.js/jQuery函数,我可以用它来在一个语句中执行此操作吗?

javascript backbone.js backbone-model

59
推荐指数
3
解决办法
4万
查看次数

在Backbone.js中,为什么静默更改最终会触发更改事件?

当我{"silent":true}在Backbone模型中设置属性时通过时,为什么不仅仅抑制change:attribute事件?下次更改属性时触发该事件的优点是什么?

更新

Backbone 0.9.10改变了传递的行为{ "silent": true }.来自更改日志:

传递{silent:true}变化将不再拖延个人"变化:attr"事件,而是完全沉默.

此处浏览更改日志

backbone.js backbone-events backbone-model

26
推荐指数
1
解决办法
2万
查看次数

将多个属性更改绑定到Backbone.js模型的正确方法

我有以下代码,我将更改绑定到单个属性"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)

javascript backbone.js backbone-events backbone-model

23
推荐指数
2
解决办法
2万
查看次数

使用backbone.js更新已更改的属性

所以我正在设置一个具有更新属性的模型.

然后在我看来我正在听这个模型的变化事件.

当那个火我想我应该使用model.changedAttributes?我是否通过回调?

它应该返回所有已更新或新的属性的哈希值?反正知道哪些是更新的,哪些是新的?

一旦我有更改属性的哈希,我该如何进行更新?将对象解析为属性类型,还是应该从get go中使用更高分辨率的侦听器?

谢谢!

javascript backbone.js backbone-model

15
推荐指数
1
解决办法
2万
查看次数

Backbone 1.0版本中的{silent:true}

我正在将我的骨干版本从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 backbone-events backbone-model

12
推荐指数
1
解决办法
2万
查看次数

Backbone.js - model.save()没有触发PUT请求

我有一个使用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)

put backbone.js backbone-model

12
推荐指数
1
解决办法
1万
查看次数

从Backbone.js模型中完全删除属性

我试图从骨干模型中完全删除属性.该模型被发送到一个不太灵活的API,如果我发送我应该发送的属性,它将会中断,所以我需要删除一个属性,使其不再存在.

我试过model.unset,从这个问题,但当我打印出对象时,我正在尝试删除的属性仍然列出,只是值为null.

我需要完全消失该属性.

我的基本结构是:

model.unset("AttrName", "silent");
Run Code Online (Sandbox Code Playgroud)

javascript backbone.js backbone-model

11
推荐指数
1
解决办法
1万
查看次数

Backbone.js - 如何通过表单保存模型并发布到服务器

我在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)

post requirejs backbone.js backbone-model

11
推荐指数
1
解决办法
2万
查看次数