标签: backbone-model

从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 model.fetch()何时完成?

我绑定了我的骨干模型的更改事件.

this.model.on( "change", this.render, this );
Run Code Online (Sandbox Code Playgroud)

有时我想获取模型的最新版本并强制渲染视图.所以我这样做

this.model.fetch();
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果新数据与先前存储在模型中的数据不同,model.fetch()仅触发change事件.

当获取完成时,我怎样才能始终触发this.render回调,无论它是否触发更改事件?

在此先感谢您的帮助

javascript backbone.js backbone-events backbone-model

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

错误:必须指定url属性或函数

这是我在BackBone.js上工作的最初时期.我实际上卡在路由器部分,因为我在控制台中收到错误"错误:必须指定url属性或函数".这是我的情景; 我有一个动态形成REST URL的点击功能,并相应地从服务器获取数据.

这是点击功能代码

function onUserClick(obj){
     var userID=$(obj).attr('id');
     window.location.href="#"+userID+"/";
     var userRouter = new UserRouter;
}
Run Code Online (Sandbox Code Playgroud)

我在路由器中有以下代码

var userModel;
var UserRouter = Backbone.Router.extend({
    routes:{
        ":userid/":"getUsers"
    },
    getUsers:function(userid){
        var url="http://myserver.com/users/"+userid;
        userModel = new UserModel({urlRoot:url});
        var userView = new UserView({el:$(#"container")});
    }
});
var UserModel = Backbobe.Model.extend({});
var UserView = Backbone.View.extend({
    model:userModel,
    initialize:function(){
        _.templateSettings = {
            interpolate: /\{\{\=(.+?)\}\}/g,
            evaluate: /\{\{(.+?)\}\}/g
        };
        this.model.fetch();
        this.model.bind("change",this.render,this);
    },
    render:function(){
        var data=this.model.toJSON();
        var userTemplate=_.template($("#userTemplate").text());
        var htmlData=userTemplate({
            "userData":data
        });
        $(this.el).html(htmlData);
    }
});
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题吗?我知道我在这里做错了什么,并就此寻求专家意见.非常感谢这种情况的一个woking样本.

backbone.js underscore.js backbone-routing backbone-model

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

Backbone - 在获取后不解析集合中的每个模型

如何在集合提取中阻止模型的解析功能?

    $(function() {
    var Task = Backbone.Model.extend({
        url : function() {
                return this.urlRoot + this.id;
        },
        urlRoot: 'index.php?c=light&a=list_tasks_bb&ajax=true&task=',
        parse: function (response, options) {
            console.log(options);
            console.log(response);
            return response;
        }
    });

    var TaskList = Backbone.Collection.extend({
        model: Task,
        url: 'index.php?c=light&a=list_tasks_bb&ajax=true',

        initialize: function () {

        },
        parse: function (response, options) {
            return response.tasks;
        }
    });

    var Light = Backbone.Router.extend({
        el: $('#light'),
        routes: {
            "tasks/:id": "taskAction",
            "*page": "defaultAction",
        },

        initialize: function () {
            _this = this;
            this.tasks = new TaskList();
            this.users = new UserList();
        }, …
Run Code Online (Sandbox Code Playgroud)

javascript backbone.js backbone-model

8
推荐指数
1
解决办法
9967
查看次数

如何从backbone.js中的视图访问模型数据

我有一个名为person的模特:

 var person = Backbone.Model.extend({
      initialize: function(){
        console.log('cool');
      },
      defaults:{
          names:['a','k','d','s','h','t']
      }
    })
Run Code Online (Sandbox Code Playgroud)

现在我有一个观点:

var person_view = Backbone.View.extend({
   model : person,
   output: function(){
      console.log(this.model.get('names'))
   }
});
Run Code Online (Sandbox Code Playgroud)

创建了视图的对象:

var obj = new person_view()
Run Code Online (Sandbox Code Playgroud)

尝试访问名称:

obj.output()
Run Code Online (Sandbox Code Playgroud)

但我得到了这个错误:

TypeError: Object function (){ parent.apply(this, arguments); } has no method 'get'
Run Code Online (Sandbox Code Playgroud)

你能告诉我如何正确地做事吗?我刚刚开始了解backbone.js所以请耐心等待我.

backbone.js backbone-views backbone-model

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

Backbone Model:解析覆盖中的Ajax请求

我有一个场景,fetch()模型的调用将返回一个数据,需要将属性传递给另一个API,并且该API的返回类型将是实际需要的数据.

var Issue = Backbone.Model.extend({
    urlRoot: 'https://api.github.com/repos/ibrahim-islam/ibrahim-islam.github.io/issues',
    parse: function(response, options){
        var markdown = new Markdown({ text : response.body });
        markdown.fetch({
            contentType: 'application/json',
            type: 'POST',
            data: JSON.stringify( markdown.toJSON() ),
            success: function(data){
                response.body = data;
            }
        });
        return response;
    }
});

var Markdown = Backbone.Model.extend({
    defaults:{
        'text': '',
        'mode' : 'markdown'
    },
    url: 'https://api.github.com/markdown'
});
Run Code Online (Sandbox Code Playgroud)

所以,当一个Issue将被取出:

var issue = new Issue({id: 1});
issue.fetch().then(function(){
  //do stuff
});
Run Code Online (Sandbox Code Playgroud)

它将具有body包含markdown语法文本的属性,反过来我需要传递给另一个API并获取将传递给视图的响应.

从上面可以看出,我试图重写parse,但它的返回类型必须是一个对象,并fetchasync所以我能做些什么在这里,使这项工作?

注意:我知道聚合服务器中的数据然后接收它将是最好的想法,但这是不可能的atm.

javascript ajax jquery backbone.js backbone-model

7
推荐指数
1
解决办法
1240
查看次数

backbone.js View确定模型的哪个属性发生了变化

如何知道在渲染函数中更改视图模型的哪个属性?(在渲染函数中,"e"是模型,但我只需要更改的属性.)我需要知道这个以了解要使用的模板.或者还有另一种方法吗?

window.Person = Backbone.Model.extend({});

window.Njerzit = Backbone.Collection.extend({
    model: Person,
    url: '/Home/Njerzit'
});

window.PersonView = Backbone.View.extend({
    tagName: 'span',

    initialize: function () {
        _.bindAll(this, 'render');
        this.model.bind('change', this.render);
    },

    render: function (e) {
        //if model name is changed, I need to render another template
        this.template = _.template($('#PersonTemplate').html());
        var renderContent = this.template(this.model.toJSON());
        $(this.el).html(renderContent);
        return this;
    }
});
Run Code Online (Sandbox Code Playgroud)

javascript backbone.js backbone-model

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

Backbone model.create不调用任何回调

我有以下代码来创建一个集合的新模型.基础数据存储区是一个远程API:

        var postCreationStatus = this.model.create(newPostModel, {
            wait : true     // waits for server to respond with 200 before adding newly created model to collection
        }, {
            success : function(resp){
                console.log('success callback');
                console.log(resp);
            },
            error : function(err) {
                console.log('error callback');
                console.log(err);
            }
        });
Run Code Online (Sandbox Code Playgroud)

创建了新模型,我可以从数据库中确认这一点,但是不会调用成功函数和错误回调函数.

创建完成后,我想重定向用户.过早地重定向会导致AJAX请求失败,这就是为什么我使用成功回调很重要的原因.

服务器以JSON响应{ id : 11 }和HTTP状态响应200 OK.

javascript backbone.js backbone-model

5
推荐指数
1
解决办法
4937
查看次数

使用骨干j中的相同集合从不同URL获取数据

我有必须调用4的外部API如集合:http://www.abc.com,http://www.fgt.com,http://www.jkl.comHTTP://www.rty .com.

我有一个名为Todos.js的Collection.有没有办法可以在一个集合中一起获取4个api,因为所有四个api都会为我提供相同的模型响应所以我从4 apis得到的响应具有相同的数据结构,即"name"和"link".

有没有办法可以在同一个集合中附加所有回复?实现这一目标的最佳方法是什么?

javascript jquery backbone.js backbone.js-collections backbone-model

4
推荐指数
1
解决办法
3812
查看次数

Backbone Model使this.set不是Model.initialize中的函数

我有一个模型听取发布事件"更新:TotalCost",当属于集合C的任何模型M发生变化时,它从(不相关的)集合C触发.

此事件在初始化方法中编码,如下所示.收到事件后,我收到以下错误:

TypeError:this.set不是函数 this.set({"totalsale":value});

CostModel = Backbone.Model.extend({     
  defaults: {
    totalSale: 0,
    totalTax: 0
  },

  initialize: function(attrs, options) {
    if(options) {
      if(options.vent) {
        this.vent = options.vent;
      }
    }

    this.vent.on("update:TotalCost", function(value) {
      this.set({ "totalSale": value}); **//ERROR HERE**
    });
  }
});
Run Code Online (Sandbox Code Playgroud)

javascript-events backbone.js underscore.js backbone-model marionette

4
推荐指数
1
解决办法
8354
查看次数