我认为这是一个常见的场景——我有一个 View ,我在其中使用 HtmlHelper 来生成一些 HTML 元素,我还有一个辅助扩展,可以让我获取生成的元素的 ID,以便我可以在 JavaScript 中使用它(例如, jQuery):
$('#@Html.FieldIdFor(model => model.Name)').autocomplete({
或者在执行 Ajax 时,我从 UrlHelper 构建 URL 字符串,再次使用服务器端代码将一些客户端内容放在页面上:
$.get('@Url.Action("States", "Location")', { country: $(this).val() }, function (json) {
那部分很简单。我知道如何做到这一点,我知道我可以将这段代码放在局部 View 中,并在我希望代码显示的位置呈现局部 View 。这不是我想问的。
页面标记中包含的代码未被缓存,这是一回事。另一件事是,有时我需要在多个 View 上使用相同的代码,我想将它放在一个地方进行维护。单个位置可能是局部 View - 但我希望缓存此代码,理想情况下它会放在 .js 文件中。但是我们不能在 .js 文件中使用服务器端代码。关键字是可缓存和单个文件。
我也知道我可以有一个 JSController 来服务于 JavaScript,例如:
<script src="@Url.Action("Script", "JS", { script = "location" })
type="text/javascript"></script>
此 Controller 操作可以作为 View 呈现的结果返回 JavaScript。
或者也许我应该停止偏执,只使用普通的 .js 文件并将元素 ID 和 URL 放在那里,如果我更新我的 View 模型或 View ,我会去更新 .js 文件。我想知道这是否是 .NET 的过度工程问题 - 我很想知道人们如何在 Rails 或 Django 中做到这一点。
所以我真正需要的是一些“最佳实践”策略。你最常做什么?你是如何解决这个问题的?
最佳答案
警告:我对 ASP.Net 的处理不多。但这个问题不是 ASP.Net 特有的,对于同时具有服务器端和客户端代码的所有应用程序来说都是同样的事情。
我可能会让主 JavaScript 文件使用 ID 等它从变量中获取,并让您的每个 View /每个页面代码为其生成变量。例如:
<script type='text/javascript'>
if (!window.Stuff) {
window.Stuff = {};
}
window.Stuff.MODEL_FIELD_SELECTOR = '#@Html.FieldIdFor(model => model.Name)';
</script>
<script type='text/javascript' src='commonstuff.js'></script>
在你的 commonstuff.js 中:
$(Stuff.MODEL_FIELD_SELECTOR).autocomplete({...
// (Or `window.Stuff.MODEL_FIELD_SELECTOR`, but unless you redefine `Stuff`
// locally, there's no need to prefix it.)
请注意,我只使用一个全局符号 Stuff 来包含这些内容,因此您不会不必要地污染全局命名空间。
这里的想法是将代码放在一个可缓存的、集中的、可重用的地方;但是,只使用动态生成的代码来设置您需要使用的事物的 ID。
更新:如果您有多个(或什至很多)这样的符号,我希望您可能会有,并且您使用的是您知道的符号您是 一个定义,你可以使用对象文字符号来使事情更紧凑:
<script type='text/javascript'>
window.Stuff = {
MODEL_FIELD_SELECTOR: '#@Html.FieldIdFor(model => model.Name)',
SOME_OTHER_SELECTOR: '#@SomeOtherThing',
SOMETHING_ELSE: '#@SomethingElse',
// ...
LAST_ONE: '#@TheLastOne'
// ^
// Important: No trailing comma here |
};
</script>
<script type='text/javascript' src='commonstuff.js'></script>
注意最后一点; IE7 和更早版本的对象字面量 (more) 尾随逗号会阻塞。
关于javascript - 请建议一种服务于包含服务器端代码的 JavaScript 的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5079647/
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar
最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru
在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo
我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案
我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的