1

バックボーン、ハンドルバー、アンダースコア、jQuery を使用して、テーブルの幅がコンテナーの div よりも広いかどうかを計算しようとしています。問題は、jQuery の .width() 関数がピクセルではなくパーセンテージを返すことです。

これに関するいくつかの投稿を読んだことがあります。たとえば、jQuery width() が生成されたコンテンツを含む div で正しい値を返さない場合、html ドキュメントにまだ添付されていない要素が css 幅を取得すると述べられています。これは理にかなっています。テーブルはデータベースから取得され、パーセンテージで css-width があり、私は制御できません。

...
var MyView = Backbone.View.extend({
                template: Handlebars.compile(myTemplate),
                tagName: 'div',
                id: 'my-doc-container',
                headerTag: 'h2',
                options: null,
                initialize: function(options) {
                    this.options = options;
                },
                setModel: function(parentModelOptions) {
                    this.model = new MyDocModel(parentModelOptions);
                    ...
                    this.render();
                },
                render: function() {
                    this.$el.html(this.template(this.model.toJSON()));
                    this._adaptContent();

                    return this;
                },
                _adaptContent: function() {
                    var tables = $(this.$el).find('table');
                    ...
                    _.each(tables, function(table) {
                        $(table).wrap('<div class="tablewrapper"/>');

                        alert($table).width());
                    }, this);
                }
                ...
              }
           })

私の質問は、これらのフレームワーク内からテーブルの幅を計算する方法について何か提案があるかどうかです。

4

1 に答える 1

0

はい、要素の幅を取得することはできません (表示でも同じです: none プロパティ、およびその他のケース...) が、既に dom にある要素を渡すことはできます。

var MyView = Backbone.View.extend({
  template: Handlebars.compile(myTemplate),
  el: "selector of element what is available in dom already like div#myTable",

  render: function() {
    this.$el.html(this.template(.....));
    this.$el.width() // => return right result

    return this;
  }  
});
于 2013-08-21T09:26:15.850 に答える