0

使用 Backbone.Rpc 插件 [ https://github.com/asciidisco/Backbone.rpc ] 我试图在获取集合时在 read 方法上发送参数。使用单个模型实例时,您可以通过设置模型属性的值向方法调用添加参数。

var deviceModel = Backbone.model.extend({
  url: 'path/to/rpc/handler',
  rpc: new Backbone.Rpc(),
  methods: {
    read: ['getModelData', 'id']
  }
});
deviceModel.set({id: 14});
deviceModel.fetch(); // Calls 'read'

// Request created by the 'read' call
{"jsonrpc":"2.0","method":"getModelData","id":"1331724849298","params":["14"]};

我知道没有相应的方法可以在获取集合之前做类似的事情,因为骨干集合没有可用的“设置”方法。

var deviceCollection = Backbone.collection.extend({
  model: deviceModel,
  url: 'path/to/rpc/handler',
  rpc: new Backbone.Rpc(),
  methods: {
    read: ['getDevices', 'deviceTypeId']
  }
});
// This is not allowed, possible work arounds?
deviceCollection.set('deviceTypeId', 2);
deviceCollection.fetch();
// Request created by the 'read' call
{"jsonrpc":"2.0","method":"getDevices","id":"1331724849298","params":["2"]};

是否可以使用 Backbone.Rpc 将参数传递给收集方法?还是我需要在 fetch 方法的数据对象中传递集合过滤器?

4

2 回答 2

3

我更新了 Backbone.Rpc (v 0.1.2) & 现在您可以使用以下语法为您的调用添加“动态”参数。

var Devices = Backbone.Collection.extend({
    url: 'path/to/my/rpc/handler',
    namespace: 'MeNotJava',
    rpc: new Backbone.Rpc(),
    model: Device,
    arg1: 'hello',
    arg2: function () { return 'world' },
    methods: {
        read : ['getDevices', 'arg1', 'arg2', 'arg3']
    }
});

var devices = new Devices();
devices.fetch();

此调用导致以下 RPC 请求:

{"jsonrpc":"2.0","method":"MeNotJava/getDevices","id":"1331724850010","params":["hello", "world", "arg3"]}
于 2012-11-15T11:23:41.263 回答
0

啊,好吧,这暂时不包括在内,但我可以理解这里的问题。我应该能够为允许 RPC 插件读取集合属性的集合添加解决方法。

var deviceCollection = Backbone.collection.extend({
    model: deviceModel,
    url: 'path/to/rpc/handler',
    rpc: new Backbone.Rpc(),
    deviceTypeId: 2,
    methods: {
        read: ['getDevices', 'deviceTypeId']
    }
});

然后将创建此响应:

{"jsonrpc":"2.0","method":"getDevices","id":"1331724849298","params":["2"]};

我今晚会看看。

于 2012-07-03T10:01:13.107 回答