我正在尝试让{{#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)