因此,假设我有一个具有多个分支的reducer,但每个分支都足够相似,可以使用工厂函数生成.所以,我创建了一个:
import { combineReducers } from 'redux'
const createReducerScope = scopeName => {
const scope = scopeName.toUpperCase()
const contents = (state = {}, action) => {
switch (action.type) {
case `${scope}_INSERT`:
return { ...state, [action.id]: action.item }
default:
return state
}
}
const meta = (state = {}, action) => {
switch (action.type) {
case `${scope}_REQUEST`:
return { ...state, requesting: true }
case `${scope}_REQUEST_FAILURE`:
return {
...state,
requesting: false,
errorMessage: String(action.error)
}
case `${scope}_REQUEST_SUCCESS`:
return {
...state,
requesting: false,
errorMessage: …Run Code Online (Sandbox Code Playgroud) 我正在为一个项目组建一个基本的CRUD系统,我们决定捆绑Backbone.js和CoffeeScript来抽象更多我们的JavaScript功能.学习曲线对我来说非常陡峭,因为我不是一个JS专业人士.
目前,我只是想拉一记.任何记录.因此,在我前进之前,我已经装配了一条虚拟路线,通过JSON提供"产品"记录集,以了解它是如何呈现的.
window.Product = Backbone.Model.extend
initialize: -> console.log this
window.Products = Backbone.Collection.extend
model: Product
initialize: -> console.log this
url: '/dummy'
Run Code Online (Sandbox Code Playgroud)
所以,在控制台中,我输入:
product = new Product()
Run Code Online (Sandbox Code Playgroud)
它似乎使产品很好.但是当我键入:
product.fetch()
Run Code Online (Sandbox Code Playgroud)
它返回:
TypeError: Cannot call method 'ajax' of undefined
Run Code Online (Sandbox Code Playgroud)
我和Collection尝试过同样的事情.
products = new Products()
products.fetch()
TypeError: Cannot call method 'ajax' of undefined
Run Code Online (Sandbox Code Playgroud)
我已经使其他部分(查看渲染等)工作得很好,但这个ajax错误反复出现在我身上.我花了几个小时查看不同的文档(包括官方文档,以及我可以从wiki中查找的所有信息),在纯JavaScript和CoffeeScript中尝试代码,实现不同的范围(有/没有窗口命名空间)等等.谷歌上没有任何东西.
这一定是我应该知道的非常简单的事情,但我无法弄清楚我的生活.或者它是我错过的文档中的一个位置.谁能告诉我我做错了什么?