如何在本地falcor模型数据集上实现突变响应

时间:2015-10-22 20:22:44

标签: falcor

鉴于我有一个示例模型:

var model = new falcor.Model({
  cache: {
    userById: {
      "1": {
        name: "User",
        email: "user@email.com"
      }
    },

    users: {
      current: null
    }
  }
});

这是我用于测试目的的本地模型,我想通过调用users.login来实现它,以便用户可以调用:

model.call(['users', 'login'], ['user', 'password'])

我意识到如果我这样做:

var model = new falcor.Model({
  cache: {
    userById: {
      "1": {
        name: "User",
        email: "user@email.com"
      }
    },

    users: {
      current: null,
      login: function(user, password) {
        console.log('this code is reached', user, password);

        // what to return in order to mutate model?
      }
    },
  }
});

当我进行呼叫时,它会到达那里,但我无法弄清楚如何将模型变异作为响应的一部分;在服务器端,我们返回带有值和无效的路径,它只是起作用,但在这里我尝试了:

// trying returning as a jsonGraph response, don't work
login: function() {
  return {
    jsonGraph: {
      users: {
        current: {$type: "ref", value: ['userById', '1']}
      }
    },
    paths: [['users', 'current']]
  }
}

// trying returning as a path set mutation list, don't work
login: function() {
  return [{path: ['users', 'current'], value: {$type: "ref", value: ['userById', '1']}}]
}

// trying force call to set on the model, don't work
login: function() {
  this.set([
    {path: ['users', 'current'], value: {$type: "ref", value: ['userById', '1']}}
  ])
}

// trying using ModelResponse, got an example on some external sources, don't work
login: funtion() {
  return new ModelResponse((observer) => {
    observer.onNext({
      jsonGraph: {
        users: {
          current: {$type: "ref", value: ['userById', '1']}
        }
      },
      paths: [['users', 'current']]
    });

    observer.onCompleted();
  });
}

现在我不知道还有什么可以尝试的;我需要一种简单的方法来在调用本地模型后声明突变,如果你知道如何解决这个问题,请在这里告诉我。

感谢。

1 个答案:

答案 0 :(得分:0)

客户端模型缓存仅支持JSONGraph,其中b / c它本质上只是带有一些约定的JSON,不支持函数。因此,在使用falcor模型缓存而不使用dataSource /中间层路由器时,无法实现调用。

在原型设计/测试时,这可能有点烦人,因为路由器在概念上比简单的JSON缓存对象更难。我刚才遇到过这个问题,所以我写了一个dataSource模块来支持它:falcor-local-datasource。 dataSource使用 支持函数节点的图形对象进行初始化,并且与上面的示例一样,将根据函数返回的JSONGraphEnvelope或{{3}的数组来改变图形。 }。