我想从模板访问我在模型(backbone.js)中实现的计算字段.我是否需要始终定义帮助程序来执行此操作?
我认为问题与我将模型传递给模板的方式有关.如果我传递this.model.toJSON(),我可以访问属性,但不能访问我在其中定义的函数.如果我直接传递this.model,我可以访问该函数,但不能访问骨干模型的属性.
问题:当存在需要以特定方式存储的属性时,初始化backbone.js模型的正确方法是什么?我是否需要映射不需要任何特殊格式的属性?我以为backbone.js做了某种自动映射.
例:
var MyModel = Backbone.Model.extend({
initialize: function (options) {
// These attributes need to be stored in a different format
// Dates
this.startYear = new Date(options.startTime).getFullYear();
// Rounding numbers
this.wholeNumber = Math.Round(options.numberWithDecimals);
// Storing empty strings as nulls
if (options.fullName == null || options.fullName == "") {
this.fullName == null;
} else {
this.fullName = options.fullName;
}
// These are fine as they are
this.fieldA = options.fieldA;
this.fieldB = options.fieldB;
this.fieldC = options.fieldC;
},
});
Run Code Online (Sandbox Code Playgroud) 这可能是一个非常简单的问题,但我很想找到答案.
使用骨干,我有这条线:
Person = Backbone.Model.extend();
Run Code Online (Sandbox Code Playgroud)
然后我在从URL填充的集合中使用它.为了这个例子,假设我有名字和姓,我想做的事情如下:
Person = Backbone.Model.extend({
FullName: this.get("firstName") + " " + this.get("lastName")
});
Run Code Online (Sandbox Code Playgroud)
我可以使用例如People.first().FullName()来调用内部主干.但是如果我将People.first()传递给我的视图并在模板中呈现它,它似乎不知道FullName是什么.
如何在Backbone中为模型添加自定义属性并在模板中使用?
干杯!
我有一个相当通用的模型和该模型的集合(见下文)我正在处理作为一系列视图的基础.在几个视图中,其中一个模型的选择会生成动作(通过'selected'属性),我需要能够在客户端跟踪选择.
但是,似乎在Backbone中没有干净的方法可以做到这一点.在客户端上模型上添加/更改的任何属性都将同步到服务器.{silent : yes}更改该属性时我无法使用,因为当change事件触发该属性时,我需要触发视图中的更改.我想出这个的唯一方法是覆盖save函数Backbone.Model
我的问题:有没有办法让我缺少客户端唯一的属性,或者我的方法在结构方面存在缺陷,我只是没有看到?
var CSEvent = Backbone.Model.extend({
idAttribute: "_id",
urlRoot : '/api/events',
defaults: {
title : "",
type : "Native",
repeatOrOneTime : "OneTime",
selected : false
}
});
var CSEventCollection = Backbone.Collection.extend({
model: CSEvent,
url: '/api/events',
getSelectedEvent : function() {
return this.find(function(csevent) { return csevent.get('selected') === true; });
},
selectEvent : function(eventId) {
this.deselectEvent();
this.get(eventId).set({selected : true});
},
deselectEvent : function() {
this.getSelectedEvent().set({selected : false});
}
});
Run Code Online (Sandbox Code Playgroud)