有可能以某种方式从下划线模板中获取DOM元素并将其用作另一个模板吗?
我的想法是我的应用程序需要呈现包含带有项目和摘要的循环的文档.我需要偶尔重新渲染摘要或一些项目,所以我不能只重新渲染整个文档.
但是,我想让应用程序用户为文档创建自己的模板很简单,我认为将所有内容保存在一个文件中可以使文档更容易.
我正在尝试使用这样的东西:
<script type="text/template" id="document-template">
<div id="document">
<h1><%= name %></h1>
<ul class="items">
<% _.each(items, function(item) { %>
<li><%= item %></li>
<% }); %>
</ul>
<div id="summary">
<p>Total items: <%= totalitems %></p>
</div>
</div>
</script>
Run Code Online (Sandbox Code Playgroud)
现在,我可以轻松地将此变量documentTemplate = _.template($('#document-template').html());转换为文档模板,但我想将摘要部分转换为模板,将列表项转换为模板.
我可以这样做:
var summaryTemplate = _.template($('#document-template #summary').html());
var itemTemplate = _.template($('#document-template .items li').html());
Run Code Online (Sandbox Code Playgroud)
PS.实际上我正在使用jQuery的$ .get从外部文件加载模板.这样我就可以将文档模板放在一个大字符串中.从那里,我可以做到documentTemplate = _.template(loadedString);.
现在,如果我可以从字符串中提取#summary元素,它应该可以工作.但是当我尝试将字符串转换为DOM元素(var domElement = $(loadedString))时(因此我可以这样做:summaryTemplate = _.template($('#summary',domElement).html());它不起作用,因为下划线将不再识别<%=%>标记.
我知道在节点开发时,你应该总是试图避免阻塞(同步)函数并使用异步函数,但是我会稍微测试一下它们如何比较.
我需要打开一个包含i18n数据(如日期和时间格式等)的json文件,并将该数据传递给使用此数据格式化我的视图中的数字等的类.
在回调中开始包装所有类的方法会有点尴尬,所以如果可能的话,我会使用同步版本.
console.time('one');
console.time('two');
fs.readFile( this.dir + "/" + locale + ".json", function (err, data) {
if (err) cb( err );
console.timeEnd('one');
});
var data = fs.readFileSync( this.dir + "/" + locale + ".json" );
console.timeEnd('two');
Run Code Online (Sandbox Code Playgroud)
这导致我的控制台中的以下行:
two: 1ms
one: 159ms
Run Code Online (Sandbox Code Playgroud)
似乎fs.readFileSync比fs.readFile快约150倍,并且需要大约1ms才能加载50KB的json文件(缩小).我所有的json文件大约是50-100KB.
我也在考虑以某种方式将这个json数据记忆或保存到会话中,以便每个会话只读取一次文件(或者当用户更改其语言环境时).我不完全确定如何做到这一点,这只是一个想法.
可以fs.readFileSync在我的情况下使用,还是以后会遇到麻烦?
我需要测试我的REST API后端,它接受使用Advanced REST Client或Postman for Chrome的JSON.
但我遇到了问题:我只能使用内置表单发送请求并使用Content-Type:application/x-www-form-urlencoded
但是这不起作用,因为我有嵌入式文档,例如,我需要POST这个:
{title:"Awesome post!", tags: ["blue", "jeans"] }
Run Code Online (Sandbox Code Playgroud)
Chrome扩展程序的内置格式无法实现此功能.
当我选择Raw Body并在那里插入内容时,我的后端将req.body看作是一个空对象.当我还设置标题"Content-Type:application/json"时,我的后端出现以下错误:
SyntaxError: Unexpected token n
at Object.parse (native)
at IncomingMessage.exports.parse.application/json (/Library/WebServer/Documents/slipfeed/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js:135:16)
at IncomingMessage.EventEmitter.emit (events.js:85:17)
at IncomingMessage._emitEnd (http.js:366:10)
at HTTPParser.parserOnMessageComplete [as onMessageComplete] (http.js:149:23)
at Socket.socket.ondata (http.js:1682:22)
at TCP.onread (net.js:404:27)
Run Code Online (Sandbox Code Playgroud)
注意:我在我的应用程序配置中使用bodyParser()和methodOverride().禁用它们没有帮助.
我应该使用哪些设置,以便我可以将JSON输入到Raw body字段,并且请求可以正常工作?
澄清答案:我必须设置Content-Type:application/json(在请求标头中)并使用格式良好的json,其中属性名称也在双引号内以使其工作.
我正在尝试编写一个测试,检查API路由是否输出具有正确内容的ZIP文件.
我正在使用mocha和supertest进行测试,我想实际读取输出流/缓冲区,读取zip文件内容并查看内容是否正确.
任何想法我该怎么做?当我尝试阅读时res.body,它只是一个空物体.
request(app)
.get( "/api/v1/orders/download?id[]=1&id=2" )
.set( "Authorization", authData )
.expect( 200 )
.expect( 'Content-Type', /application\/zip/ )
.end( function (err, res) {
if (err) return done( err );
console.log( 'body:', res.body )
// Write the temp HTML file to filesystem using utf-8 encoding
var zip = new AdmZip( res.body );
var zipEntries = zip.getEntries();
console.log( 'zipentries:', zipEntries );
zipEntries.forEach(function(zipEntry) {
console.log(zipEntry.toString()); // outputs zip entries information
});
done();
});
Run Code Online (Sandbox Code Playgroud) 我试图使用JS gettext库(http://jsgettext.berlios.de/)中的po2json解析器/转换器,但是当我尝试转换时,我收到此错误:
Can't locate JSON.pm in @INC (@INC contains: /Library/Perl/5.12/darwin-thread-multi-2level /Library/Perl/5.12 /Network/Library/Perl/5.12/darwin-thread-multi-2level /Network/Library/Perl/5.12 /Library/Perl/Updates/5.12.4 /System/Library/Perl/5.12/darwin-thread-multi-2level /System/Library/Perl/5.12 /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level /System/Library/Perl/Extras/5.12 .) at ./po2json line 23.
BEGIN failed--compilation aborted at ./po2json line 23.
Run Code Online (Sandbox Code Playgroud)
据我所知,我错过了一个perl模块,即JSON.pm,我认为就是这个:http://cpansearch.perl.org/src/MAKAMAKA/JSON-2.53/lib/JSON.pm
现在,我如何在OSX上安装它?我正在使用Mountain Lion.
我试过cpan install JSON,但它不起作用,我收到以下错误:
Writing Makefile for JSON
MAKAMAKA/JSON-2.53.tar.gz
make -- NOT OK
'YAML' not installed, will not store persistent state
Running make test
Can't test without successful make
Running make install
Make had returned bad status, install seems impossible
Run Code Online (Sandbox Code Playgroud) 我知道至少有两种方法可以从.js文件中提取gettext字符串 - 使用python模式下的gettext解析器(我听说有一些缺点)和用python编写的Babel.
有没有办法从HTML文件中提取gettext字符串 - 或者更确切地说 - Javascript模板(下划线,小胡子等......).据我所知,也不是Babel或gettext.
我的一个朋友试图让Babel去做,但是它有一些严重的问题,错过了一些翻译等...
更新:朋友指导我一点,所以现在看来我可以按照我想要的方式提取所有字符串.我唯一缺少的是"翻译评论".我使用的命令是这样的:
find . -iname '*.html' -o -iname '*.js' | xargs xgettext --language=Python --from-code=utf-8 --keyword=pgettext:1c,2 --keyword=npgettext:1c,2,3
Run Code Online (Sandbox Code Playgroud)
这将在关键字中包含pgettext和npgettext
更新2:我发现要提取HTML标记属性中的gettext消息,我必须在JS部分之间插入换行符.例如,我必须将此转换为:
<a href="" title="<%= ST.i18n.gettext('Click to add another row') %>"></a>
Run Code Online (Sandbox Code Playgroud)
进入:
<a href="" title="
<%= ST.i18n.gettext('Click to add another row') %>"></a>
Run Code Online (Sandbox Code Playgroud)
Python模式下的xgettext如果位于同一行,则不会提取gettext消息.这是一个似乎对我有用的快速黑客攻击.
更新3:似乎PHP模式下的xgettext从HTML中提取消息没有任何问题(至少使用Undsrscore模板),这也适用于翻译者评论.
find ../app -iname '*.html' | xargs xgettext --language=PHP --from-code=utf-8 -c --keyword=gettext --keyword=ngettext:1,2 --keyword=pgettext:1c,2 --keyword=npgettext:1c,2,3 -o translations.po
Run Code Online (Sandbox Code Playgroud)
这样,我可以在模板文件中保持正常的格式:
<a href="" title="<%= ST.i18n.gettext('Click to add another row') %>"></a>
Run Code Online (Sandbox Code Playgroud) 在Mongoose文档中建议我应该能够使用插入"init"钩子的中间件来控制流程.
但是,到目前为止,我只能通过"保存"和"验证"获得成功.
当我做这样的事情时,这些中间件都不会被调用:
MySchema.post( "init", function (next) { console.log("post init") });
MySchema.pre( "init", function (next) { console.log("pre init") });
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
我正在尝试创建一些可拖动的元素(标记),可以在一个可疑的div内拖动.似乎一切都在工作,除了......在我拖动一个元素然后放下它之后,我再也无法拖动它了.似乎我再也无法绑定它的dragstart事件了.
知道为什么会这样,我该如何解决?
这是我小提琴的链接:http://jsfiddle.net/gXScu/1/
HTML:
<div id="editor" contenteditable="true">
Testime siinkohal seda, et kuidas<br />
on võimalik asja testida.
<span class="draggable" draggable="true" contenteditable="false">Token</span>
</div>
<span class="draggable" draggable="true" contenteditable="false">Token 2</span>
Run Code Online (Sandbox Code Playgroud)
Javascript(jQuery)
var bindDraggables = function() {
console.log('binding draggables', $('.draggable').length);
$('.draggable').off('dragstart').on('dragstart', function(e) {
if (!e.target.id)
e.target.id = (new Date()).getTime();
e.originalEvent.dataTransfer.setData('text/html', e.target.outerHTML);
console.log('started dragging');
$(e.target).addClass('dragged');
}).on('click', function() {
console.log('there was a click');
});
}
$('#editor').on('dragover', function (e) {
e.preventDefault();
return false;
});
$('#editor').on('drop', function(e) {
e.preventDefault();
var e = e.originalEvent;
var content …Run Code Online (Sandbox Code Playgroud) 我的应用有几个用户,每个用户都有文档.每个文档都需要有一个序列号,可能看起来像这样:2013-1,2013-2(年份和序列号),或者只是一个简单的数字:1,2,3 ......
目前,我在创建Mongoose docuemnt时从用户的设置中分配序列号.根据序列号和用户设置的数字格式,我生成最终的文档编号.
我意识到,当同时创建2个文档时,它们将得到完全相同的数字,因为我在保存文档后刚刚在设置中递增序列号.但是,当我创建(不保存)文档时,我正在分配序列号,因此两个文档的序列号将完全相同.
我显然需要一种方法来处理这个序列号在保存时自动递增...
如何确保此数字是唯一的并自动递增/生成?
我用2个实例方法建立了一个简单的模型.如何在生命周期回调中调用这些方法?
module.exports = {
attributes: {
name: {
type: 'string',
required: true
}
// Instance methods
doSomething: function(cb) {
console.log('Lets try ' + this.doAnotherThing('this'));
cb();
},
doAnotherThing: function(input) {
console.log(input);
}
},
beforeUpdate: function(values, cb) {
// This doesn't seem to work...
this.doSomething(function() {
cb();
})
}
};
Run Code Online (Sandbox Code Playgroud)