小编Edw*_*ith的帖子

Contenteditable DIV - 如何确定光标是否位于内容的开头或结尾

我有一个contenteditable div,其中包含典型的所见即所得编辑器html(粗体,锚点,列表).

我需要确定当前光标是否为onKeyDown,在div的开头和结尾.原因是,基于光标位置和按下的键,我可能想要将此div与退格上的前一个div合并,或者在输入时创建一个新的跟随div.

我一直在摆弄范围,但是当你在元素中使用html时,事情变得相当复杂.

我希望我必须忽略一些简单的解决方案.

是否有一种相对简单的方法来确定这一点 - 我愿意使用像Rangy这样的库.

谢谢!

编辑:我正在考虑以下几点:

$('.mycontenteditable').bind('keydown', handle_keydown)

handle_keydown = function(e) {

  range = window.getSelection().getRangeAt(0)
  start_range = document.createRange()
  start_range.selectNodeContents(this.firstChild)
  start_range.collapse(true) // collapse to start
  is_start = start_range.compareBoundaryPoints(Range.START_TO_START,range)
  end_range = document.createRange()
  end_range.selectNodeContents(this.lastChild)
  end_range.collapse(false)
  is_end = end_range.compareBoundaryPoints(Range.END_TO_END,range)
}
Run Code Online (Sandbox Code Playgroud)

我会遇到类似这样的奇怪问题吗?

html javascript dom contenteditable rangy

14
推荐指数
3
解决办法
5710
查看次数

CanCan中最安全,最Rails的方式来做Guest,User,Admin权限

我对rails(3)相对较新,并且正在使用CanCan构建一个应用程序,其中有3层用户.

  • 访客 - 未注册的访客用户
  • 注册并登录访客
  • 管理员 - 使用管理员标志注册并登录访客

我的能力现在是bog-stock,从cancan docs复制,基本上定义了guest角色和admin角色

class Ability

    include CanCan::Ability

    def initialize(user)
        user ||= User.new # Guest user

        if user.is_admin?
            can :manage, :all
        else
            can :read, [Asana,Image,User,Video,Sequence]
        end
    end

end
Run Code Online (Sandbox Code Playgroud)

我想添加用户角色.由于我正在创建那个一次性用户模型,我想过使用new_record?确定用户是否已登录.就像是:

class Ability

    include CanCan::Ability

    def initialize(user)
        user ||= User.new # Guest user

        if !user.new_record? and user.is_admin?
            can :manage, :all
        elsif !user.new_record? and !user.is_admin?
            can {registered user-y permissions}
        else
            can :read, [Asana,Image,User,Video,Sequence]
        end
    end

end
Run Code Online (Sandbox Code Playgroud)

但是,它感觉不对.似乎有点与实际登录相关,并且担心它是否真正安全.

寻求更优雅的方式来做这个建议.

谢谢!

ruby-on-rails cancan ruby-on-rails-3

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

在Backbone.js中处理REST API的"创建"响应的最佳方法是什么

我正在使用backbone.js与REST API进行交互,当它发布到它以创建新资源时,响应状态为201,"Location"标头指向资源的URI,但是空体.

当我创建一个新模型时,它成功了,但模型的本地表示只包含我明确设置的属性,而不包含将在服务器上设置的任何属性(created_date等)

根据我的理解,Backbone将使用正文中的数据更新其模型的表示,如果有的话.但是,既然没有,它就没有.

所以,显然,我需要使用Location标头中的位置来更新模型,但是最好的方法是什么.

我目前的心态是我必须从头部解析url,拆分id,设置模型的id,然后告诉模型fetch().

这看起来非常混乱.有更清洁的方法吗?

我对API有一些影响.是尝试让API作者将新模型作为响应主体返回的最佳解决方案(保留201和位置标题)?

谢谢!

rest backbone.js

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

JSX没有使用嵌套在A中的SPAN生成预期输出

我刚刚开始使用React,并且正在尝试使用React Components重新创建现有的HTML输出.

我不确定这是一个错误,还是我做错了什么,但最终的HTML输出并不是我所期待的.

问题是标签锚文本不应包含在范围内,只能包含以下数字.

从这个JSX开始:

/** @jsx React.DOM */;
var MyComponent = React.createClass({
  render: function() {
    return (
      <div>
        <div>
          <ul>
            <li><a>Tab1 <span>3</span></a></li>
            <li><a>Tab2 <span>9</span></a></li>
            <li><a>Tab3 <span>5</span></a></li>
            <li><a>Tab4 <span>6</span></a></li>
          </ul>
        </div>
      </div>
    );
  }
});
React.renderComponent(MyComponent({}), document.body);
Run Code Online (Sandbox Code Playgroud)

编译成以下JS:

/** @jsx React.DOM */;
var MyComponent = React.createClass({displayName: 'MyComponent',
  render: function() {  
    return (
      React.DOM.div(null, 
        React.DOM.div(null, 
          React.DOM.ul(null, 
            React.DOM.li(null, React.DOM.a(null, "Tab1 ", React.DOM.span(null, "3"))),
            React.DOM.li(null, React.DOM.a(null, "Tab2 ", React.DOM.span(null, "9"))),
            React.DOM.li(null, React.DOM.a(null, "Tab3 ", React.DOM.span(null, "5"))),
            React.DOM.li(null, React.DOM.a(null, "Tab4 ", React.DOM.span(null, "6")))
          ) …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-jsx

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

如何将具有HABTM关系的模型与其他种子模型联系起来

我正在研究我的第一个Rails(3)应用程序,并期待播种一堆数据.

我遇到的问题是我想要种一些与我刚播种的其他模型有一个has_and_belongs_to_many关系的模型.我做的似乎是正确的,但我没有得到我期待的结果.

我有一个Asana模型(简化):

class Asana < ActiveRecord::Base
  has_and_belongs_to_many :therapeutic_foci
end
Run Code Online (Sandbox Code Playgroud)

和TherapeuticFocus模型:

class TherapeuticFocus < ActiveRecord::Base
  has_and_belongs_to_many :asanas
end
Run Code Online (Sandbox Code Playgroud)

在我的db/seeds.rb中,我创建了一些TherapeuticFoci:

tf = TherapeuticFocus.create([
  {:name => 'Anxiety'},
  {:name => 'Asthma'},
  {:name => 'Fatigue'},
  {:name => 'Flat Feet'},
  {:name => 'Headache'},
  {:name => 'High Blood Pressure'},
  {:name => 'Stress'} ])
Run Code Online (Sandbox Code Playgroud)

然后创建一个Asana:

asanaCreate = Asana.create!([
  { :english_name => 'Mountain Pose', 
    :traditional_name => 'Tadasana', 
    :pronunciation => 'TadaSANA', 
    :deck_set => 'Basic', 
    :type => 'Standing', 
    :therapeutic_foci => TherapeuticFocus.where("name in ('Stress','Flat Feet')")}
])
Run Code Online (Sandbox Code Playgroud)

结果是创建了TherapeuticFocus模型,创建了Asana,但它并没有创建与TherapeuticFocus模型的关系.结果数组为空.

如果我跑

TherapeuticFocus.where("name in ('Stress','Flat …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails ruby-on-rails-3

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

允许匿名/来宾用户"试用"功能,而无需在Rails/Devise/CanCan应用程序中注册

我正在使用Devise和CanCan开发Rails 3应用程序.

该应用程序允许匿名(未注册)用户访问某些应用程序,并允许注册用户访问其他部分.

应用程序(瑜伽锻炼应用程序)的一个方面是用户可以通过将瑜伽姿势串联起来创建瑜伽序列,然后他们可以在视频播放器中播放它们.

我目前已为注册用户提供所有功能,但现在希望允许匿名用户能够创建序列并播放它,但要"保存"它(即能够在任何后续会话中再次使用它) ,他们需要注册.

目前,这需要实际创建一个属于用户的Sequence模型实例(简化如下)

class Sequence < ActiveRecord::Base

  validates_presence_of :name
  validate :status_must_be_private_if_user_nil

  # Associations
  has_many :ordered_asana_sequences, :class_name => "OrderedAsanaSequence", :order => 'position ASC', :dependent => :destroy
  has_many :asanas, :through => :ordered_asana_sequences

  belongs_to :user


  def status_must_be_private_if_user_nil
  errors.add(:status, "must be private is user is nil") if
    user == nil and status != :private
  end
end
Run Code Online (Sandbox Code Playgroud)

但是,当然,匿名用户没有用户模型.

我有点像Hackces属于用户的东西,但它不是强制性的(user_id可以是nil,如上所示),并且通过CanCan保护编辑的能力:

class Ability
    {snip}
    # A guest can play with creating sequences
    can :create, [Sequence]
    # A guest can edit/update their own Sequences …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails devise cancan

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