2017-03-08 38 views
0

我想实现移动设备到用户创建组的功能。该功能是当用户选择 设备时,出现创建组按钮。点击创建组按钮,打开了形式为用户在用户填写与组名的形式创建组和 ,传奇将运行,这将有POST功能的createGroup实施 和URL创建组是REDX传奇中的多文章功能

/device_groups

,我已经完成,正在工作,但现在用户已创建的组,所选 设备应当移动到该创建的组。我应该怎么做?张贴装置创建组的网址是

/device_group /的groupId /添加

概括地说,用户选择装置或设备,并创建一组显示按钮,用户创建一个组,然后那些选定的设备应该移到该组。

并且它只接受所选设备ID的列表。

function* createGroup(action) { 
    console.log('action', action); 
    const group = action.group; 
    const deviceId = action.deviceId; 
    if (yield call(isGroupValid, fromJS(action.group))) { 
    yield fork(POST(`/device_groups`, createGroupSuccess, createGroupError, group)); 
    } 
} 

case CREATE_GROUP: 
    return state 
    .set('loading', true) 
    .set('error', null); 

case CREATE_GROUP_SUCCESS: 
    const deviceGroups = fromJS(action.group, idReviver); 
    return state.set('loading', false).set('error', null) 
    .setIn(['deviceGroups', deviceGroups.get('id')], deviceGroups); 

export function createGroup(group, deviceId) { 
    return { 
    type: CREATE_GROUP, 
    group, 
    deviceId 
    }; 
} 

export function createGroupSuccess(group) { 
    return { 
    type: CREATE_GROUP_SUCCESS, 
    group, 
    }; 
} 

回答

0

我会尽可能做的事情是改变组创建API端点接受进入该组的设备标识列表。这样你只需要做一个api调用。

如果这是不可能的,我会修改传奇做这样的事情:

function* createGroup(action) { 
    try { 
    const group = action.group; 
    const deviceIds = action.deviceIds; 
    if (yield call(isGroupValid, fromJS(action.group))) { 
     // Create group 
     const createdGroup = yield call(API.createGroup, group); 
     // Add devices to new group 
     yield deviceIds.map((deviceId) => call(API.addDeviceToGroup, createdGroup, deviceId)); 
     // Success action 
     yield put(createGroupSuccess(createdGroup)); 
    } 
    } catch (e) { 
    yield put(createGroupFailed(group)); 
    } 
} 

这里API包含了返回的承诺,做实际的REST调用功能。