我想构建一个Ember.Component,可以在块形式中使用,或者在需要某些默认行为时不使用块.
例如,以块形式:
{{#my-helper}}
...
{{/my-helper}}
Run Code Online (Sandbox Code Playgroud)
或非阻止形式:
{{my-helper}}
Run Code Online (Sandbox Code Playgroud)
辅助模板以某种方式能够检测到没有块并且相应地表现.例如,如果有某种方法来检测块,那将是很好的:
{{#if hasBlock}}
{{yield}}
{{else}}
default output
{{/if}}
Run Code Online (Sandbox Code Playgroud)
根据我的要求,我需要有一些方法只有在没有块的情况下输出内容.
任何想法如何做到这一点?
如果你对为什么我的问题与接受的答案一致感到困惑,那是因为Ember碰巧采用了我原本想象的新语法.当我第一次提出这个问题时,结果显示有一种没有文档记载的方法可以使用,{{#if template}}但此后已被Ember 2.x弃用,而且新的语法{{#if hasBlock}}恰好与我的问题表达方式相符.
我正在从rspec 2升级到rspec 3,并希望使用新语法而不启用旧语法.但我有一些我在顶级before(:each)块中设置的存根,我有选择地unstub想要原始实现.
当我使用新allow语法定义存根时,是否有一些等效方法来删除存根?
我注意到可枚举的mixin具有依赖于'[]'属性的计算属性,而ember数组也具有该'@each'属性.
依赖'[]'和有'@each'什么区别?
我更模糊的理解(如果我错了,请纠正我)是'[]'在替换数组内容时触发的.但这取决于房产本身有何不同?
考虑以下类:
C = Ember.Object.extend({
things: null,
watcher1: (function() {
console.log('watcher1')
}).observes('things.[]'),
watcher2: (function() {
console.log('watcher2')
}).observes('things.@each')
});
Run Code Online (Sandbox Code Playgroud)
我创建一个实例如下:
c = C.create({things: Ember.A(['a', 'b'])});
Run Code Online (Sandbox Code Playgroud)
下列:
c.get('things').replace(0, 1, ['z'])
Run Code Online (Sandbox Code Playgroud)
触发器watcher1和watcher2
以下内容:
c.get('things').setObjects(['1', '2'])
Run Code Online (Sandbox Code Playgroud)
也触发watcher1和watcher2
同样如下:
c.get('things').addObject('v')
Run Code Online (Sandbox Code Playgroud)
那有什么区别吗?我们何时应该使用一个与另一个?
谢谢!凯文
根据博客文章的ember-data版本1.0.0-beta.16,商店现在可以用作服务:
TweetComposerComponent = Ember.Component.extend({
store: Ember.inject.service()
});
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何qunit对这样的组件进行单元测试.我尝试过以下方法:
moduleForComponent('tweet-composer', {
needs: ['service:store']
});
Run Code Online (Sandbox Code Playgroud)
和:
moduleForComponent('tweet-composer', {
needs: ['store:main']
});
Run Code Online (Sandbox Code Playgroud)
当我做前者时,我得到一个错误Attempting to register an unknown factory: 'service:store',如果我做后者那么store就是undefined.
思考?
(我正在写一个ember-cli样式应用程序).
更新:
在ember-test-helpers repo中似乎存在一个未解决的问题.
在我等待这个修复的同时,我制作了一个可以作为一种间隙测量的辅助工具(coffeescript):
`import TestModuleForComponent from 'ember-test-helpers/test-module-for-component'`
`import { createModule } from 'ember-qunit/qunit-module'`
# This assumes the last argument, the callbacks, is present, although it
# does support the description being an optional …Run Code Online (Sandbox Code Playgroud) 谷歌的Chrome浏览器有一个很好的功能,可以在您退出该功能之前向您显示调试器中的返回值.它显示了在Scope与沿调试器窗格中的一个列表Watch,Call Stack等它看起来像这样.
我很好奇是否有控制台访问此变量?
在调试时我经常需要做这样的事情:
<return>.filter(function(z) { return z >= 0; })
Run Code Online (Sandbox Code Playgroud)
或任何其他任意方式来了解返回值是否是我期待的.不幸的是,我找不到<return>在控制台中引用的方法.我希望有一些变量$_可以让我访问,但我没有找到看起来可能的地方.
我意识到我可以查看列表中<return>显示的对象,Scope但如果该项是一个大型数组或复杂对象等,我宁愿在调试器中输入一些代码,同时在断点处暂停以查看我是否得到我期望的.
我通常采用的是修改我的代码以将返回值保存到变量,然后重现步骤以回到断点,但这很烦人.
思考?
乍一看,我认为新的ruby 2.0 Thread.handle_interrupt将解决我所有的异步中断问题,但除非我弄错了,否则我无法做到我想做的事情(我的问题是在最后和标题中).
从文档中,我可以看到如何避免在某个块中接收中断,将它们推迟到另一个块.这是一个示例程序:
duration = ARGV.shift.to_i
t = Thread.new do
Thread.handle_interrupt(RuntimeError => :never) do
5.times { putc '-'; sleep 1 }
Thread.handle_interrupt(RuntimeError => :immediate) do
begin
5.times { putc '+'; sleep 1}
rescue
puts "received #{$!}"
end
end
end
end
sleep duration
puts "sending"
t.raise "Ka-boom!"
if t.join(20 + duration).nil?
raise "thread failed to join"
end
Run Code Online (Sandbox Code Playgroud)
当使用参数运行时,2它会输出如下内容:
--sending-
--received Ka-boom!
Run Code Online (Sandbox Code Playgroud)
也就是说,主线程RuntimeError在两秒后发送给另一个线程,但该线程在进入内部Thread.handle_interrupt块之前不会处理它.
不幸的是,如果我不知道我的线程在哪里被创建,我看不出这对我有什么帮助,因为我无法将它所做的一切都包装在一个块中.例如,在Rails中,我将包围Thread.handle_interrupt或begin...rescue...end阻塞什么?根据Web服务器的运行情况,这不会有所不同吗?
我希望的是一种注册处理程序的方法,就像Kernel.trap工作方式一样.也就是说,我想指定与上下文无关的处理代码,它将处理某种类型的所有异常:
register_handler_for(SomeExceptionClass) do
... …Run Code Online (Sandbox Code Playgroud) 我面临着将三个张量连接在一起,使得3个px1张量成为一个3px1张量.
我能想出的最简洁的是:
torch.Tensor{v2:totable(),v4:totable(),v6:totable()}:view(3*p,1)
Run Code Online (Sandbox Code Playgroud)
有没有办法在不转换为表格和返回张量的情况下执行此操作?似乎应该有一种将张量连接到某个指定维度的通用方法,假设它们具有兼容的形状.
我可以看到如何编写这样一个函数,一个不存在吗?
我最近在vim中启用了鼠标模式:
set mouse=a
Run Code Online (Sandbox Code Playgroud)
我喜欢滚动,但突出文字很糟糕.我在Mac上的iTerm2中使用vim.现在,当我选择文本时,突出显示非常慢(仅在突出显示拖动完成后突出显示),突出显示的文本不会自动复制到我的剪贴板中,就像使用iTerm2选择时一样.
有没有办法在vim中允许基于鼠标/触控板的滚动而不使用鼠标进行可视模式文本选择?
我试过了:
set mouse=n
Run Code Online (Sandbox Code Playgroud)
当我尝试选择时,这会阻止文本突出显示,但它也会阻止iTerm2突出显示文本.
更新:
感谢这篇文章,我意识到我可以通过按住选项键来获得我想要的几乎所有行为,但这相当繁琐.我真的不想在每次选择时都按住选项键.思考?
UPDATE2:
感谢评论中的建议,我能够更加接近.我需要重新编译vim +clipboard才能启用:
brew install vim
Run Code Online (Sandbox Code Playgroud)
现在,如果我愿意忍不住将正在进行的高亮显示作为选择文本,那么我至少可以在视觉模式选择之后将其放入剪贴板中.如果我真的想要更好的选择人体工程学,我可以按住alt/option并获得原始的iTerm2选择行为.
我希望我能扭转这些模式.例如,默认情况下通过按住alt/option并启用可视模式行为来实现的行为,当我想要一个键时...但是哦,这已经足够了.
我有一个使用的Ember应用程序ember-cli,我正在使用ember-qunit测试适配器编写我的测试,并testem按照ember-cli文档中的说明在浏览器中运行它们.虽然当我对我的应用程序感兴趣时,谷歌浏览器中的调试工作正常,但在运行测试时我无法使用许多调试功能,如断点.
我经常遇到一个问题,即我的测试失败,尽管我的实际应用程序似乎正常工作,并且在我的测试运行时调查我想要逐步执行代码的问题.
但当我进入我出现的代码时,vendor.js我只是看到了以下内容vendor.js:
// Please wait a bit.
// Compiled script is not shown while source map is being loaded!
Run Code Online (Sandbox Code Playgroud)
这两行是文件的第6行和第7行.前面的行是空白的,这两行是文件中的最后一行.调试器将文件的第一行突出显示,就好像它是源中的当前位置,但由于某种原因它无法显示源.
我可以继续执行代码,但我看不到任何东西.
但是,如果我vendor.js在开发人员工具源文件列表的源列表中找到它,那么它将作为单独的源选项卡打开,我可以看到我的所有代码.在这一点上,我有两个标签vendor.js,一个标签包含我所有的供应商资产,另一个标有上面引用的那些标签.
我猜测我的测试服务方式和我的应用程序在开发环境中的服务方式之间存在一些不同之处.
我使用以下版本的东西:
ember 1.9.1
ember-data 1.0.0-beta.14.1
ember-cli 0.1.9
qunit 1.17.1
ember-qunit 0.2.0
testem 0.6.33
Run Code Online (Sandbox Code Playgroud)
虽然我已经开了一堆,但我并没有任何关于问题源于何处的线索.也许它与如何testem运行测试有关?或者它可能是我的测试中包含的东西有一个混乱的源地图?
我感谢任何帮助或想法.
我有一个小的go命令行实用程序,我正在以通常的方式构建:
go build
Run Code Online (Sandbox Code Playgroud)
我使用该flag包添加命令行标志.一切都在游泳,直到我开始出现很多测试标志.现在,当我使用打印用法时,flag.Usage我会看到许多额外的标志:
-test.bench string
regular expression to select benchmarks to run
-test.benchmem
print memory allocations for benchmarks
-test.benchtime duration
approximate run time for each benchmark (default 1s)
-test.blockprofile string
write a goroutine blocking profile to the named file after execution
-test.blockprofilerate int
if >= 0, calls runtime.SetBlockProfileRate() (default 1)
Run Code Online (Sandbox Code Playgroud)
除此之外还有很多.
我正在使用主标志集和添加标志flag.IntVar等.
我无法弄清楚我做了什么或如何启用它.我的其他程序都没有在默认用法消息中包含这些测试标志.我很欣赏任何指针.
在Ember中,我有时遇到需要检查函数是否返回promise的情况.例如,如果我有一个派生的路线:
MyRoute = ParentRoute.extend({
beforeModel: function() {
this._super().then(function() {
// do something...
});
}
});
Run Code Online (Sandbox Code Playgroud)
但是虽然beforeModel可以返回一个承诺,但它可能不会.特别是,如果它是默认Ember.K实现,那么它不是.我宁愿不总是这样做:
var res = this._super();
if (typeof res.then === "function") {
res.then(function() {
// do X
});
} else {
// do X
}
Run Code Online (Sandbox Code Playgroud)
我假设有一种方法来包装一些人不知道的东西,如果它是一个可能的,然后链接无论如何.但我在文档中找不到它.
以上是不可取的,因为它很冗长,并且要求X的代码两次.
思考?
更新:
通过以下coffeescript测试,我能够确认@ torazaburo的回复:
`import { test, module } from 'ember-qunit'`
module "testing promise behavior"
test "can cast to promise", ->
expect 3
order = []
returnsPromise = ->
new Ember.RSVP.Promise (resolve) ->
order.push 'a'
resolve('response 1') …Run Code Online (Sandbox Code Playgroud) 我做了以下事情:
Blah = torch.class('Blah')
function Blah:__init(); end
blah = Blah()
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
attempt to call global 'Blah' (a table value)
Run Code Online (Sandbox Code Playgroud)
我期望__init()函数以某种方式通过__callmetatable机制工作,但Blah似乎甚至没有metatable:
th> getmetatable(Blah) == nil
true
Run Code Online (Sandbox Code Playgroud)
也许文档已经过时了?但火炬似乎在内部以这种方式创造了大量的课程.
我刚刚更新到最新的火炬,所以我知道这不是我的火炬版本太旧了...
思考?
我正在使用go:generate来处理自动生成一些数据库模型的过程,希望通过来运行我的go模板gofmt,但是它会使所有额外的{{ ... }}动态部分窒息。
我是否缺少明显的东西?我希望这是一个用例的gofmt人已经解决,给双方gofmt和go generate是去工具链的突出部分。
显然,它可以在go fmt之后运行,go generate但是格式化不佳的模板(占99%的代码)会让人感到肮脏。
ember.js ×5
ember-cli ×2
ember-qunit ×2
go ×2
lua ×2
torch ×2
debugging ×1
ember-data ×1
iterm2 ×1
javascript ×1
rabbitmq ×1
rspec ×1
rspec3 ×1
rsvp.js ×1
ruby ×1
source-maps ×1
testem ×1
vim ×1