小编Jar*_*ish的帖子

在html视图中渲染JBuilder视图

我用JBuilder创建了一个json视图.但我想将其预加载到数据对象中,因此Backbone可以在不提取数据的情况下尽早访问数据.

如何将list.json.jbuilder视图呈现到list.html.erb视图中?

通常没有jbuilder,我会做这样的事情:

<div data-list="<%= @contents.to_json %>"></div>
Run Code Online (Sandbox Code Playgroud)

json jbuilder ruby-on-rails-3

21
推荐指数
1
解决办法
6668
查看次数

如何使用Backbone.js在模型上设置动态属性

故事:我有很多需要设置的属性.由于它们有相似之处,我选择读出类,输入框是属性名称的一部分.

问题:可以设置对象的动态属性,就像关联数组一样.所以我能做到

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.我也发现了另一个解决方案 …

javascript arrays object backbone.js

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

如何使用backbone.js保存而不指定哪些属性但使用回调

我想将修改后的模型保存到数据库中(之前设置).如果保存成功重定向到另一个页面(例如,可以是任何其他操作).

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)

"同步"也是错误的事件(因为它也适用于销毁)

有帮助吗?

javascript backbone.js

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

如果键与underscore.js匹配,则比较两个数组

我有一个拥有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.所以我需要仔细检查一下.

javascript underscore.js

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

Rails活动模型序列化器,如何返回空字符串而不是null

我必须使用遗留应用程序,并且必须重写旧的(PHP基础)rest api.在旧的api中,当属性为null时,它变为空字符串.

然而,Rails只返回一个null,这会破坏应用程序.重写应用程序不是解决方案(即使这是最干净的方式).同样在旧的api中,其他值是(整数,布尔值,数字)的字符串.所以我想知道,如何在每个属性上执行to_s,而不是覆盖每个属性.我正在使用主动模型序列化器.

ruby-on-rails active-model-serializers

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

计算多个数组之间的可能组合

我正在制作一个问题清单.有3个问题,每个问题有4个答案.我正在尝试计算哪些组合是可能的.

应该有4x4x4(= 64)种可能的组合.我期待像这样的数组[1,1,1](用户用第一个答案回答所有3个问题).

我看到ruby有一个很好的permatation方法,但它不是permatiation.组合方法只需要一个帐户1个数组.

所以总之,我有3个数组,每个都有[1,2,3,4],我喜欢每个组合的64个数组

ruby ruby-on-rails

3
推荐指数
1
解决办法
371
查看次数

从coffeescript课程中发出事件

我想从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 jquery coffeescript

0
推荐指数
1
解决办法
2151
查看次数