2

「ワークフローの状態に基づいて異なる権限」の問題に取り組もうとしていますが、取得するために必要な現在のオブジェクトの ID を「いつでも」取得できないように見えるという事実に苦労しています。そのオブジェクトの許可。私が言いたいのは、次のようなjquery bbq docsに従ってクライアント状態からそれを取得することができたということです:

$.bbq.getState().id

しかし、これはページが完全にロードされた後にのみ実行可能であるように見えます。メインビューのイベントに次のようなアラートを配置して、これを調査しました。

openerp.web.PageView = openerp.web.PageView.extend({
    on_loaded: function(data) {
        this._super(data);
        alert('page load ' + $.bbq.getState().id);
    },
    do_show: function() {
        this._super();
        alert('page show ' + $.bbq.getState().id);
    },
    reload: function() {
        this._super();
        alert('page reload ' + $.bbq.getState().id);
    },
    on_record_loaded: function(record) {
        this._super(record);
        alert('record loaded ' + $.bbq.getState().id);
    }
});

そして、ページ ビューを開くと (たとえば、検索ビューでアイテムをクリックして)、常に"未定義" になることがわかりました。

次に、ページ ナビゲーションを使用してオブジェクトから別のオブジェクトに渡すときに、"reload" と "on_record_loaded" に入れます。そして、「編集」ボタンをクリックすると、また見逃してしまいます。

フォームビューでは、キャッシュが適切に配置されているように見えるため、最初のロードでのみ正常に取得できました。そのため、pdb を Web クライアントの fields_view_get に配置し、これを "init_view" の形式にすると:

var ids = [];
if ($.bbq.getState().id){
    ids = [parseInt($.bbq.getState().id)];
}
console.log(ids);
return this.rpc("/web/view/load", {
    "model": this.model,
    "view_id": this.view_id,
    "view_type": "form",
    toolbar: this.options.sidebar,
    context: context,
    ids: ids,
    }, this.on_loaded);

ページが読み込まれるのは初めてです。からIDを取得すると同じことが起こります

this.dataset.ids

コア Web モジュールのどこを見ても、これに適した API が見つかりません。現在のレコードを取得/処理するための適切な方法がないことが (特にデータセット上で) 奇妙に見えます。コンテキストとセッションでさえ、それに関する情報はありません。

おそらく、これを最初のロード時にビュー自体に保存する必要があります...

ご指摘ありがとうございます。

4

2 に答える 2

1

試す:

this.view.datarecord.id

フォーム ビューでの OpenERP 7: google chrome を使用してデバッグ

于 2013-07-10T04:49:32.300 に答える
0

の組み合わせを試してみてください

this.dataset.idsthis.dataset.index

お気に入り curr_id = this.dataset.ids[this.dataset.index]

これで問題が解決する場合があります。

于 2012-06-22T08:03:30.927 に答える