我用JBuilder创建了一个json视图.但我想将其预加载到数据对象中,因此Backbone可以在不提取数据的情况下尽早访问数据.
如何将list.json.jbuilder视图呈现到list.html.erb视图中?
通常没有jbuilder,我会做这样的事情:
<div data-list="<%= @contents.to_json %>"></div>
Run Code Online (Sandbox Code Playgroud) 故事:我有很多需要设置的属性.由于它们有相似之处,我选择读出类,输入框是属性名称的一部分.
问题:可以设置对象的动态属性,就像关联数组一样.所以我能做到
var customattribute = this.$el.parents('div').attr('id');
var value = $(e.currentTarget()).val();
this.model.attributes[customattribute] = value;
Run Code Online (Sandbox Code Playgroud)
但这不会触发模型的更改事件.我可以手动触发更改事件,但这不会更新this.model.changedAttributes(),我只需要设置更改的属性,而不是每个属性.
这当然也不起作用:
this.model.set(customattribute: value);
Run Code Online (Sandbox Code Playgroud)
那我该如何处理这个问题呢?
我有可以设置的ALOT(200+)属性,我不想为每个属性创建单独的eventlisteners,除非这是唯一的方法.
码:
var Display = Backbone.View.extend({
className: 'display',
events: {
'slide .slider' : 'sliderHandler'
},
initialize: function(){
_.bindAll(this, 'render', 'sliderHandler','update');
this.model.on('change',this.update, this);
},
render: function(){
this.$el.html(_.template(html, {}));
this.$('.slider').slider();
return this;
},
sliderHandler: function(e){
var slider = $(e.currentTarget);
var property = slider.parents('div').attr('id');
var value = slider.slider('value');
this.model.attributes[property] = value;
},
update: function(){
console.log(this.model.changedAttributes());
//get changed attribute + value here
},
});
Run Code Online (Sandbox Code Playgroud)
编辑:
下面的两个答案解决了它.将属性映射到对象并将其提供给Backbone.我也发现了另一个解决方案 …
我想将修改后的模型保存到数据库中(之前设置).如果保存成功重定向到另一个页面(例如,可以是任何其他操作).
Model.save可以有两个可选属性.第一个是属性的哈希,第二个是选项(如成功和错误回调).http://backbonejs.org/#Model-save
somemodel.set({foo: 'bar'});
//lots of other logic and misc steps the user has to do
somemodel.save(); //on success should go here
Run Code Online (Sandbox Code Playgroud)
由于属性已经设置,我只需要回调.
过去我做过:
somemodel.save(somemodel.toJSON(), {
success: function() {
//other stuff
}
);
Run Code Online (Sandbox Code Playgroud)
或者将值再次传递给save方法
somemodel.save(
{ foo: this.$('input').val()},
{ success: function(){}
);
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法来清理它.文档说明,如果有新属性,模型将触发更改状态.但是我想要重定向用户(保存新内容或旧/未更改).
这不存在:
somemodel.on('success', function(){});
Run Code Online (Sandbox Code Playgroud)
而这只是用于验证:
if(somemodel.save()) { //action }
Run Code Online (Sandbox Code Playgroud)
"同步"也是错误的事件(因为它也适用于销毁)
有帮助吗?
我有一个拥有Facebook权限的数组,以及用户应该给出的权限数组:
window.FB.api('/me/permissions', function(perm){
if(perm){
var given_permissions = _.keys(perm['data'][0];
var needed_permissions = ["publish_stream", "email"];
//now check if given permissions contains needed permissions
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想比较,如果所有的needed_permissions都在given_permissions,在下划线精明的方式(不包括循环两个数组我和比较值).我看到了一个_.include方法,但这会将数组与值进行比较.如果所有权限都可用,我想返回true,否则返回false.如果可能的话,我正在寻找一个不错的单线电话.
原因是,FB.login即使用户选择取消扩展权限,也会返回true.所以我需要仔细检查一下.
我必须使用遗留应用程序,并且必须重写旧的(PHP基础)rest api.在旧的api中,当属性为null时,它变为空字符串.
然而,Rails只返回一个null,这会破坏应用程序.重写应用程序不是解决方案(即使这是最干净的方式).同样在旧的api中,其他值是(整数,布尔值,数字)的字符串.所以我想知道,如何在每个属性上执行to_s,而不是覆盖每个属性.我正在使用主动模型序列化器.
我正在制作一个问题清单.有3个问题,每个问题有4个答案.我正在尝试计算哪些组合是可能的.
应该有4x4x4(= 64)种可能的组合.我期待像这样的数组[1,1,1](用户用第一个答案回答所有3个问题).
我看到ruby有一个很好的permatation方法,但它不是permatiation.组合方法只需要一个帐户1个数组.
所以总之,我有3个数组,每个都有[1,2,3,4],我喜欢每个组合的64个数组
我想从coffeescript类中发出事件,类似于Backbone.View的做法.
class Countdown extends Backbone.View
countdown = new Countdown
countdown.on "complete", ->
something()
Run Code Online (Sandbox Code Playgroud)
所以没有backbone.js,例如:
class Countdown extends SomeEmitter
countdown = new Countdown
countdown.start()
countdown.on "complete", ->
something()
Run Code Online (Sandbox Code Playgroud)
Atm我有这样的事情:
class SomeEmitter
events: $({})
#So I need to countdown.events.on "complete"
Run Code Online (Sandbox Code Playgroud)
但是这可能会以某种方式重构,所以我从倒计时实例而不是countdown.events发出事件.我不在我的项目中使用backbone.js,因此仅仅为Backbone.Events部分包含它是愚蠢的.我认为应该可以以某种方式扩展$({}),或jquery中可用的其他东西(jQuery.Event?)
更新:
我想我会做一些事情:
class SomeEmitter
constructor: ->
@events = ${{})
on: (eventName, cb) =>
@events.on eventName, cb
trigger: (eventName) =>
@events.trigger eventName
Run Code Online (Sandbox Code Playgroud)
我不使用Backbone.Events(或查看代码和复制片段)的原因是因为我有一个完全工作的触发器和方法的jQuery.所以应该可以扩展它,而不是编写我自己的发射器.
javascript ×4
backbone.js ×2
arrays ×1
coffeescript ×1
jbuilder ×1
jquery ×1
json ×1
object ×1
ruby ×1