Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery RubyonRails和AJAX设计最佳实践_Jquery_Ruby On Rails_Ajax_Html - Fatal编程技术网

Jquery RubyonRails和AJAX设计最佳实践

Jquery RubyonRails和AJAX设计最佳实践,jquery,ruby-on-rails,ajax,html,Jquery,Ruby On Rails,Ajax,Html,我正在准备一个带有RoR的web应用程序,并希望从HTML5实现历史API 假设我有一个控制器'Item',一个视图'Item\u view',在'Item\u view'中有一个div'div' 当我动态加载“div”(例如单击)时,我是否: 调用控制器“项”,然后选择有问题的“div”,或 调用仅加载“div”的单独控制器 第一个选项与加载整个页面消耗相同的资源,这里的AJAX是无用的(对吧?)。但是第二个选项意味着我需要为我想要动态加载的页面的每一部分使用一个控制器。还是有别的方法?有

我正在准备一个带有RoR的web应用程序,并希望从HTML5实现历史API

假设我有一个控制器'Item',一个视图'Item\u view',在'Item\u view'中有一个div'div'

当我动态加载“div”(例如单击)时,我是否:

  • 调用控制器“项”,然后选择有问题的“div”,或
  • 调用仅加载“div”的单独控制器
第一个选项与加载整个页面消耗相同的资源,这里的AJAX是无用的(对吧?)。但是第二个选项意味着我需要为我想要动态加载的页面的每一部分使用一个控制器。还是有别的方法?有没有根据请求类型过滤控制器加载的内容的方法?有什么最佳实践技巧吗


谢谢。

我会调用您通常调用的项目控制器和操作(显示、新建、编辑)。将div代码放入名为_item_view.html.erb的部分中

使用带有AJAX请求的respond_-to-block,您可以只加载所需的部分以及部分所需的对象,而不是加载show/edit/new操作的整个HTML块。如果不需要构建任何对象,只需删除@items实例变量和:collection=>@items赋值

因此,如果要显示一个项集合,下面将为@items集合中的每个项呈现部分item_视图,并将其返回给JavaScript

def index
  @items = Item.all
  respond_to do |format|
    format.html {...code...}
    format.js {
      render :layout => false, :partial => 'item_view', :collection => @items
    }
  end
end

我将调用您通常调用的项目控制器和操作(show、new、edit)。将div代码放入名为_item_view.html.erb的部分中

使用带有AJAX请求的respond_-to-block,您可以只加载所需的部分以及部分所需的对象,而不是加载show/edit/new操作的整个HTML块。如果不需要构建任何对象,只需删除@items实例变量和:collection=>@items赋值

因此,如果要显示一个项集合,下面将为@items集合中的每个项呈现部分item_视图,并将其返回给JavaScript

def index
  @items = Item.all
  respond_to do |format|
    format.html {...code...}
    format.js {
      render :layout => false, :partial => 'item_view', :collection => @items
    }
  end
end

也许你应该调用同一个控制器,但为不同的部分添加不同的操作…也许你应该调用同一个控制器,但为不同的部分添加不同的操作。。。