我正在尝试让{{#each}}助手迭代一个对象,就像在香草把手中一样.不幸的是,如果我在一个对象上使用#each,Ember.js版本会给我这个错误:
Assertion failed: The value that #each loops over must be an Array. You passed [object Object]
我写了这个帮手,试图解决这个问题:
Ember.Handlebars.helper('every', function (context, options) {
var oArray = [];
for (var k in context) {
oArray.push({
key : k,
value : context[k]
})
}
return Ember.Handlebars.helpers.each(oArray, options);
});
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试使用时{{#every}},我收到以下错误:
Assertion failed: registerBoundHelper-generated helpers do not support use with Handlebars blocks.
这似乎是一个基本功能,我知道我可能会遗漏一些明显的东西.有人可以帮忙吗?
编辑:
这是一个小提琴:http://jsfiddle.net/CbV8X/
假设我有:
const AddItemButton = React.memo(({ onClick }) => {
// Goal is to make sure this gets printed only once
console.error('Button Rendered!');
return <button onClick={onClick}>Add Item</button>;
});
const App = () => {
const [items, setItems] = useState([]);
const addItem = () => {
setItems(items.concat(Math.random()));
}
return (
<div>
<AddItemButton onClick={addItem} />
<ul>
{items.map(item => <li key={item}>{item}</li>)}
</ul>
</div>
);
};
Run Code Online (Sandbox Code Playgroud)
每当我添加一个项目时,<AddItemButton />由于addItem是一个新实例,都会重新渲染该项目。我尝试记住addItem:
const addItemMemoized = React.memo(() => addItem, [setItems])
Run Code Online (Sandbox Code Playgroud)
但这是从第一个渲染中重用setItems,而
const addItemMemoized = React.memo(() => addItem, [items]) …Run Code Online (Sandbox Code Playgroud) 假设我有:
const req = require('net').createConnection(80, 'localhost');
req.on('error', (error) => {
console.error(error) // handle somehow
});
Run Code Online (Sandbox Code Playgroud)
如果发生错误事件,我得到
{ Error: connect ECONNREFUSED 127.0.0.1:80
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1117:14)
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 80 }
Run Code Online (Sandbox Code Playgroud)
在航站楼。
我想看看完整的堆栈:
{ Error: connect ECONNREFUSED 127.0.0.1:80
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1117:14)
at Object.<anonymous> (/Users/aleksey/error-handing-example.js:2:7)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:743:3)
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED', …Run Code Online (Sandbox Code Playgroud)