- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我最近读到在 JavaScript 中嵌入 ruby 不是一个好主意。然而,在 David Heinemeier Hansson 的 Agile Web Development with Rails 等书籍中,这正是它所做的。如果将 ruby 嵌入 JS 不是一个好主意,那么这种情况下的最佳做法是什么?给出像这样简单的东西:(jQuery + ruby)
posts_controller
def create
@post = Post.new(params[:post])
respond_to do |format|
if @post.save
format.html { redirect_to(@post, :notice => 'Post was successfully created.') }
format.js #will use this response to process ajax
else
format.html { render :action => "new" }
end
end
end
create.js.erb
$tr = $('<tr>');
$td1 = $('<td>').text('<%= @post.title %>');
$td2 = $('<td>').text('<%= @post.content %>');
$tr.append($td1, $td2);
$('table tbody').append($tr);
应该如何重构以遵循不将 ruby 嵌入 JS 的“最佳实践”?(如果是这样的话)
我真的需要在这方面有所启发,也许要弄清楚概念,因为我读过 Rails 3.1 将通过 Assets 将 JS 与 Ruby 完全分开?(这是正确的吗?)
谢谢!
最佳答案
RJS 模板本质上是很长一段时间内完成事情的方式,这就是为什么您仍然在教程中看到这种技术如此流行的原因。话虽这么说,正如您所注意到的,他们正在走出去,而且有充分的理由。
我确信 RJS 模板非常糟糕的原因有很多,但一个重要原因是它们将您的 View JS 与您的 View HTML 耦合得有多紧密.许多问题由此产生,其中一些是:
缺乏灵 active 。
以您的代码为例。如果您希望能够从不同的 Angular 创建帖子怎么办?并有不同的效果?也许没有 <table>
在所有页面上,您只想弹出一条“成功”消息?等等
如果您只想要帖子的数据表示,但您的 javascript 模板是为操作 HTML 而编写的怎么办?
你如何处理所有这一切create.js.erb
,这很可能与帖子 new.html.erb
紧密耦合模板?
复杂性。
RJS 模板在某种程度上是在真空中运行的。在服务器端生成,它们的执行不绑定(bind)到 DOM 事件。这使得执行诸如更新 <form>
之类的事情变得棘手。在创建对象后的页面上,因为您没有引用框架来选择适当的 <form>
在 JS 模板中(例如 <form id="new_post_123">
)。有一些解决方法,但它们比需要的更复杂。
通过绑定(bind)到表单客户端并处理结果,这个问题就被消除了。您无需在回复后找到合适的表格进行更新。
对于 RJS,您没有这样的绑定(bind),并且您被迫使用 HTML 的已知结构来检索和操作适当的元素。不必要的复杂性的一个例子。
I really need to be enlightened on this, and maybe get the concepts right because I have read that rails 3.1 will separate JS from Ruby completely through assets ?(Is this correct?)
这基本上是正确的。 Assets 管道虽然很酷,但并没有提供任何全新的东西。 Sprockets 和 Sass 等 Assets 框架及其支持的工作流已经存在了一段时间。 Rails 3.1 asset pipeline 只是将它们带入了标准实践。正如 DHH 在他最近的 RailsConf keynote 中谈到的,这更像是一个视角问题。 .通过对这些 Assets (尤其是 js 文件)进行更好的组织,它使它们感觉更像是一等公民,可以这么说,值得像您的后端代码一样受到关注。与 public/javascripts
的“垃圾抽屉”感觉相反.
你可以这样做(虽然未经测试并且有点简化,例如在 Rails 3 中你可以使用响应器而不是 respond_to block :
# as you have, but returning the object as data which can be handled client-side,
# rather than RJS generated by the server
def create
@post = Post.new(params[:post])
respond_to do |format|
if @post.save
format.js { render :json => @post }
else
# ...
end
end
end
// Then in your client side JS, a handler for your remote form.
$(function(){
$('#your-create-form').bind('ajax:success', function(data, status, xhr) {
// simply repeating what you had in the template, replacing the erb with
// attributes from the returned json
$tr = $('<tr>');
$td1 = $('<td>').text(data.title);
$td2 = $('<td>').text(data.content);
$tr.append($td1, $td2);
$('table tbody').append($tr);
});
}
关于javascript - 拥有混合 Javascript 和 ruby 的文件是否正确? IE。 (.js.erb)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7221923/
这个问题已经有答案了: How to do case insensitive string comparison? (23 个回答) 已关闭 3 年前。 用户在我的输入栏中写入“足球”,然后执行第 6
啊,不习惯 javascript 中的字符串。 character_id= + id + correct= + correctOrIncorrect 这就是我需要制作成字符串的内容。如果您无法猜测字符
$(function() { var base_price = 0; CalculatePrice(); $(".math1").on('change', function(e) { Calc
我找不到任何文章回答问题:将Spinnaker部署到Spinnaker将管理的同一Kubernetes集群是否安全/正确?我主要是指生产,HA部署。 最佳答案 我认为Spinnaker和Kuberne
我正在使用MSVC在Windows上从源代码(官方源代码发布,而不是从仓库中)构建Qt5(Qt 5.15.0)。 我正在设置环境。变量,依赖项等,然后运行具有1600万个选项的configure,最后
我需要打印一个包含重复单词的数组。我的数组已经可以工作,但我不知道如何正确计算单词数。我已经知道,当我的索引计数器 (i) 为 49 时,并且当 (i) 想要计数到 50 时,我会收到错误,但我不知道
我正在遵循一个指南,该指南允许 Google map 屏幕根据屏幕尺寸禁用滚动。我唯一挣扎的部分是编写一个代码,当我手动调整屏幕大小时动态更改 True/False 值。 这是我按照说明操作的网站,但
我有一个类“FileButton”。它的目的是将文件链接到 JButton,FileButton 继承自 JButton。子类继承自此以使用链接到按钮的文件做有用的事情。 JingleCardButt
我的 friend 数组只返回一个数字而不是所有数字。 ($myfriends = 3) 应该是…… ($myfriends = 3 5 7 8 9 12). 如果我让它进入 while 循环……整个
这个问题在这里已经有了答案: Is there a workaround to make CSS classes with names that start with numbers valid?
我正在制作一个 JavaScript 函数,当调整窗口大小时,它会自动将 div 的大小调整为与窗口相同的宽度/高度。 该功能非常基本,但我注意到在调整窗口大小时出现明显的“绘制”滞后。在 JS fi
此问题的基本视觉效果可在 http://sevenx.de/demo/bootstrap-carousel/inc.carousel/tabbed-slider.html 获得。 - 如果你想看一看。
我明白,如果我想从函数返回一个字符串文字或一个数组,我应该将其声明为静态的,这样当被调用的函数被返回时,内容就不会“消亡”。 但我的问题是,当我在函数内部使用 malloc 分配内存时会怎样? 在下面
在 mySQL 数据库中存储 true/false/1/0 值最合适(读取数据消耗最少)的数据字段是什么? 我以前使用过一个字符长的 tinyint,但我不确定它是否是最佳解决方案? 谢谢! 最佳答案
我想一次读取并处理CSV文件第一行中的条目(例如打印)。我假设使用Unix风格的\n换行符,没有条目长度超过255个字符,并且(现在)在EOF之前有一个换行符。这意味着它是fgets()后跟strto
所以,我们都知道 -1 > 2u == true 的 C/C++ 有符号/无符号比较规则,并且我有一种情况,我想有效地实现“正确”比较。 我的问题是,考虑到人们熟悉的尽可能多的架构,哪种方法更有效。显
**摘要:**文章的标题看似自相矛盾。 本文分享自华为云社区《Java异常处理:如何写出“正确”但被编译器认为有语法错误的程序》,作者: Jerry Wang 。 文章的标题看似自相矛盾,然而我在“正
我有一个数据框,看起来像: dataDemo % mutate_each(funs(ifelse(. == '.', REF, as.character(.))), -POS) # POS REF
有人可以帮助我使用 VBScript 重新格式化/正确格式化带分隔符的文本文件吗? 我有一个文本文件 ^分界如下: AGREE^NAME^ADD1^ADD2^ADD3^ADD4^PCODE^BAL^A
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我是一名优秀的程序员,十分优秀!