それを行うための最善の方法は、あなたのモデルにこれを追加することです:
function initialize() {
this.set("calculatedColumn", function() { return this.otherColumn; });
}
バックボーンモデルは、通常、「model.attributes」内部で実際のデータ値を格納します。そのため、モデルをテンプレートに直接渡すと、モデルに直接追加された機能だけがあり、データは追加されません。また、model.toJSON()を使用すると、通常、バックボーンで_.clone(model.attributes)として実装されます(backbone.jsを参照)。したがって、モデルに直接追加された関数ではなく、データがあります。これが上記の理由です - モデルオブジェクト自体ではなく、model.attributesに関数を設定します。 model.attributesを直接参照しないでください。model.get( "calculatedColumn")とmodel.set( "calculatedColumn"、...)を使用してください。
だからモデル。get( "calculatedColumn")は関数を返します。ハンドルバーで{{computedColumn}}に行くと(ハンドルバーを使用していると仮定して)、関数によって返された値が表示されます。しかし、バックボーンはmodel.toJSONへのJSON.stringify(backbone.js)を行い、JSON.stringifyは関数を無視するため、calculateColumnはサーバーに送信されません。 JSON.stringifyが関数を無視しないようにするには(ビューのレンダリングとモデルの同期中にtoJSONがモデル上で実行されるたびに関数がデータ値に変換されるようにする)@Derick Baileyと同様にmodel.toJSONをオーバーライドします。
また、Backbone.Modelから独自のBaseModelを派生させ、.toJSONをオーバーライドし、必要に応じてすべてのモデルをBaseModelから派生させることができます。その後、任意のモデルに適用できるジェネリックバージョンの.toJSONが必要になります。ここで
私は、問題は、私はテンプレートにモデルを渡す方法で行うことがあると思います。 – Juanma