最新版本jquery-tmpl-rails会触发 sprockets 弃用警告:
DEPRECATION WARNING: Sprockets method `register_engine` is deprecated.
Please register a mime type using `register_mime_type` then
use `register_compressor` or `register_transformer`.
https://github.com/rails/sprockets/blob/master/guides/extending_sprockets.md#supporting-all-versions-of-sprockets-in-processors
(called from block (2 levels) in <class:Railtie> at /my/path/to/gems/jquery-tmpl-rails-ef6f58001d41/lib/jquery-tmpl-rails/engine.rb:10)
Run Code Online (Sandbox Code Playgroud)
在弃用警告之后,gem 中的问题就在这里:https : //github.com/jimmycuadra/jquery-tmpl-rails/blob/master/lib/jquery-tmpl-rails/engine.rb#L10
目前是:
app.assets.register_engine(".tmpl", JqueryTemplate)
然后,我访问了 sprockets 指南,用于处理 sprockets 2,3,4 的弃用、可扩展性和合规性。https://github.com/rails/sprockets/blob/master/guides/extending_sprockets.md#supporting-all-versions-of-sprockets-in-processors
我尽最大努力通过在此叉上提交来纠正问题:https : //github.com/oceanshq/jquery-tmpl-rails/commit/de7a59894f512efb3c1eba432da3517f21d921a2
这是:
asset.register_mime_type 'application/javascript', extensions: ['.tmpl'], charset: :unicode
asset.register_preprocessor 'application/javascript', JqueryTemplate
Run Code Online (Sandbox Code Playgroud)
然而,当尝试运行 Web 应用程序或在 CI 上测试它时,这种尝试只是简单地处理故障。所以显然我错过了一些东西。
我已经看到微软为jQuery创建了一个官方的jQuery模板插件.但是,我读过的j模板很受欢迎.我不知道我是否应该打扰jTemplates并直接进入jQuery模板或者给jTemplates一个去.
有什么建议?
注意:这是我第一次使用任何客户端模板框架.
刚刚升级到IE9的RC,发现我使用jQuery模板的网页没有呈现模板内容.
当我在开发人员工具(以及Safari,FF等)中切换到IE8浏览器模式时,页面工作正常.
有人有任何想法吗?
所以我有这个调用函数的JQuery模板:
<script id="Fred" type="text/x-jQuery-tmpl">
<td>${functionX()}${Field2}</td>
</script>
Run Code Online (Sandbox Code Playgroud)
效果很好.但现在我想将参数传递给它,但以下内容不起作用.
<script id="Fred" type="text/x-jQuery-tmpl">
<td>${functionX(${Field1})}${Field2}</td>
</script>
Run Code Online (Sandbox Code Playgroud)
有什么建议?
具体来说,我有一个JQuery模板,我使用.tmpl将它追加到div.我的代码是:
$("#" + this.templateID).tmpl({ results: resultsArray }).appendTo("#" + this.targetID);
Run Code Online (Sandbox Code Playgroud)
这会在div的末尾敲打我的模板.但是,我想淡入它.我不想在页面上创建额外的div.
理想情况下,我想要做的是将模板化数据添加到页面,并选择最外层元素并将其设置为none,以使其显示为不可见.然后告诉它淡入,因此生成的标记与页面上已有的其他项无缝匹配.
任何想法如何做到这一点?
现在jquery团队已经停止了它的开发,jquery.tmpl有什么好的替代品.它现在将由jQuery UI团队协调,因为它将成为即将推出的jQuery UI Grid的依赖项.但是由于未来的电网还很遥远,我可以使用哪种引擎.我支持的是Cakephp
http://blog.jquery.it/2011/04/16/official-plugins-a-change-in-the-roadmap/
PS:关于这个主题的MOst问题已经过时,因此我问了这个问题.所以到2011年我应该去哪一个.
在Javascript中,我有一个User包含对象数组的department对象,如下所示:
user =
{
departments: [
{id: 1, name: 'Department 1'},
{id: 2, name: 'Department 2'},
{id: 3, name: 'Department 3'}
]
}
Run Code Online (Sandbox Code Playgroud)
使用jquery模板(版本1.4.2)我想渲染一个<select>标签,如下所示:
<select name="departmentId" id="department">
{{each departments}}
<option value="{{= id }}">{{= name }}</option>
{{/each}}
</select>
Run Code Online (Sandbox Code Playgroud)
这不会在选项元素中生成任何值.如何使用模板访问每个部门对象的id和name属性.
目前我们的开发团队使用这种模式,但我不禁想知道是否有更快或更高效的方法来完成相同的任务.
HTML
<select id="myList" style="width: 400px;">
</select>
<script id="myListTemplate" type="text/x-jQuery-tmpl">
<option value="${idField}">${name}</option>
</script>
Run Code Online (Sandbox Code Playgroud)
这是Javascript:
function bindList(url) {
callAjax(url, null, false, function (json) {
$('#myList').children().remove();
$('#myListTemplate').tmpl(json.d).appendTo('#myList');
});
}
Run Code Online (Sandbox Code Playgroud) 如果未定义可变大小,则以下代码在Chrome中返回错误 " Uncaught ReferenceError:size not defined ":
<script type="text/x-jquery-tmpl">
{{if name && size}}
<p>${name}</p>
<p>${size}</p>
{{/if}}
</script>
Run Code Online (Sandbox Code Playgroud)
虽然这段代码工作正常:
<script type="text/x-jquery-tmpl">
{{if name}}
{{if size}}
<p>${name}</p>
<p>${size}</p>
{{/if}}
{{/if}}
</script>
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式使它在Chrome中工作而不使用双if语句,为什么它会返回错误?
在我的项目中的JQuery模板中,我试图写出一个不对HTML进行编码的HTML字符串变量.当我像这样输出变量时:
${description}
Run Code Online (Sandbox Code Playgroud)
它导致原始HTML字符串输出标签,所有这些都是这样的:
<p>text <b>bold</b> <i>italic</i></p>
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将标记转换为代码中相同位置的真实标记时:
{{html $description}}
Run Code Online (Sandbox Code Playgroud)
不输出任何东西!
我尝试了很多传递变量的方法,但我认为html例程中有一些事情我没有得到.
谢谢.
更新:
以下是它的调用方式:
this.$el.attr('data-id', tmplData.id).
data('id', tmplData.id).html($.tmpl(this.template, tmplData));
Run Code Online (Sandbox Code Playgroud)
this.template是模板文件,tmplData是JSON,包括$ description和其他所需的变量.
另一个更新:
{{html '<p>string</p>'}}
Run Code Online (Sandbox Code Playgroud)
表现得像预期的那样.但
{{html $another_variable}}
Run Code Online (Sandbox Code Playgroud)
即使$ another_variable中没有HTML,也无法生成任何输出.
另一个更新:
我也尝试过:
${$item.html(description)}
Run Code Online (Sandbox Code Playgroud)
并将对模板的调用更改为
this.$el.attr('data-id', tmplData.id).
data('id', tmplData.id).
html($.tmpl(this.template, tmplData, {
truncate: _.truncateStrip,
html: _.html,
}));
Run Code Online (Sandbox Code Playgroud)
并编写了一个自定义的html例程来按照建议不变地传递字符串:
html: function(str) {
return str;
}
Run Code Online (Sandbox Code Playgroud)
但仍然没有骰子.
jquery-templates ×10
jquery ×7
javascript ×3
json ×1
jtemplates ×1
ruby ×1
selectlist ×1
sprockets ×1