0

私はsimplecart.jsを使用して、以前に作成したWebサイトに小さなストアを構築しています。問題が1つあります。ショッピングカート全体が1行のコードで表示されます。

<div class="simpleCart_items"></div>

そしてjavascriptはテーブルを印刷します、あなたはそれをソースコードで見ることができません。しかし、chromeのinspect要素は私の親友であり、作成されたテーブルは次のようになります。

<table>
    <tbody>
        <tr class="headerRow">
            <th class="item-name">Tuote</th>
            <th class="item-price">Hinta</th>
            <th class="item-decrement"></th>
            <th class="item-quantity">Määrä</th>
            <th class="item-increment"></th>
            <th class="item-total">Yhteensä</th>
            <th class="item-remove"></th>
        </tr>
        <tr class="itemRow row-0 odd" id="cartItem_SCI-3">
            <td class="item-name">Teipit (Valkoinen hiilikuitu)</td>
            <td class="item-price">€48.00</td>
            <td class="item-decrement">
                <a href="javascript:;" class="simpleCart_decrement">-</a>
            </td>
            <td class="item-quantity">1</td>
            <td class="item-increment">
                <a href="javascript:;" class="simpleCart_increment">+</a>
            </td>
            <td class="item-total">€48.00</td>
            <td class="item-remove">
                <a href="javascript:;" class="simpleCart_remove">Poista</a>
            </td>
        </tr>
    </tbody>
</table>

そして、私はそれがこのようなものを印刷したいです:

<table>
    <tbody>
        <tr class="headerRow">
            <th class="item-name">Tuote</th>
            <th class="item-price">Hinta</th>
            <th class="item-decrement"></th>
            <th class="item-quantity">Määrä</th>
            <th class="item-increment"></th>
            <th class="item-total">Yhteensä</th>
            <th class="item-remove"></th>
        </tr>
        <tr class="itemRow row-0 odd" id="cartItem_SCI-3">
            <td class="item-name">Teipit (Valkoinen hiilikuitu)</td>
            <td class="item-price">€48.00</td>
            <td class="item-decrement">
                <a href="javascript:;" class="simpleCart_decrement">-</a>
            </td>
            <td class="item-quantity">1</td>
            <td class="item-increment">
                <a href="javascript:;" class="simpleCart_increment">+</a>
            </td>
            <td class="item-total">€48.00</td>
            <td class="item-remove">
                <a href="javascript:;" class="simpleCart_remove">Poista</a>
            </td>
        </tr>
        <tr class="shippingtotal" id="shipping">
            <td class="item-name">Shipping</td>
            <td class="shipping-cost">€5.00</td>
            <td class="item-decrement">
                <a href="javascript:;" class="simpleCart_decrement">-</a>
            </td>
            <td class="item-quantity">1</td>
            <td class="item-increment">
                <a href="javascript:;" class="simpleCart_increment">+</a>
            </td>
            <td class="item-total">€48.00</td>
            <td class="item-remove">
                <a href="javascript:;" class="simpleCart_remove">Poista</a>
            </td>
        </tr>
    </tbody>
</table>

だから、ここにsimplecart.js自体があります:http: //pastebin.com/j5VKGkV1

コードのこの部分に何かを追加する必要があると思います。

// write out cart
                writeCart: function (selector) {
                    var TABLE = settings.cartStyle.toLowerCase(),
                        isTable = TABLE === 'table',
                        TR = isTable ? "tr" : "div",
                        TH = isTable ? 'th' : 'div',
                        TD = isTable ? 'td' : 'div',
                        cart_container = simpleCart.$create(TABLE),
                        header_container = simpleCart.$create(TR).addClass('headerRow'),
                        container = simpleCart.$(selector),
                        column,
                        klass,
                        label,
                        x,
                        xlen;

                    container.html(' ').append(cart_container);

                    cart_container.append(header_container);


                    // create header
                    for (x = 0, xlen = settings.cartColumns.length; x < xlen; x += 1) {
                        column = cartColumn(settings.cartColumns[x]);
                        klass = "item-" + (column.attr || column.view || column.label || column.text || "cell") + " " + column.className;
                        label = column.label || "";

                        // append the header cell
                        header_container.append(
                        simpleCart.$create(TH).addClass(klass).html(label));
                    }

                    // cycle through the items
                    simpleCart.each(function (item, y) {
                        simpleCart.createCartRow(item, y, TR, TD, cart_container);
                    });

                    return cart_container;
                },

                // generate a cart row from an item
                createCartRow: function (item, y, TR, TD, container) {
                    var row = simpleCart.$create(TR).addClass('itemRow row-' + y + " " + (y % 2 ? "even" : "odd")).attr('id', "cartItem_" + item.id()),
                        j,
                        jlen,
                        column,
                        klass,
                        content,
                        cell;

                    container.append(row);

                    // cycle through the columns to create each cell for the item
                    for (j = 0, jlen = settings.cartColumns.length; j < jlen; j += 1) {
                        column = cartColumn(settings.cartColumns[j]);
                        klass = "item-" + (column.attr || (isString(column.view) ? column.view : column.label || column.text || "cell")) + " " + column.className;
                        content = cartCellView(item, column);
                        cell = simpleCart.$create(TD).addClass(klass).html(content);

                        row.append(cell);
                    }
                    return row;
                }

            });

しかし、何ですか?送料はこれで表示できます <span class="simpleCart_shipping"></span>。カートの後に追加してみましたが、ちょっとばかげています。

更新:これは(前の)モフィケーションのない例です: 前 そしてこれはそれがどうあるべきかです..

必要なもの

4

1 に答える 1

0

これを追加することから始めます:

    // [..]
    header_container = simpleCart.$create(TR).addClass('headerRow'),

    // Added line
    total_container = simpleCart.$create(TR).addClass('shippingtotal').attr('id', "shipping" ),

    container = simpleCart.$(selector),
    // [..]

    // create header
    // [..]

    // cycle through the items
    // [..]

    // create total
    cart_container.append(total_container);
    total_container.append( createTotalShippingRow() );   // Even though invoked just once

    return cart_container;

createCartRow: function (item, y, TR, TD, container) {
    // [..]
},

createCartTotalShippingRow: function() {

    // Impl. look other update
}

createTotalShippingRow: function() {

    // Impl. look other update
}

私はimplに取り組みます。今 :-)


以下を設定に追加します.. ( http://pastebin.com/j5VKGkV1から)

settings = {

    cartTotalColumns: [{
        attr: "name",
        label: "Name"
    }, {
        attr: "price",
        label: "Price",
        view: 'currency'
    }, {
        view: "empty",      // replaces decrement
        label: false
    }, {
        attr: "empty",      // replaces quantity
        label: false        // Qty
    }, {
        view: "empty",      // replaces increment
        label: false
    }, {
        attr: "total",
        label: "SubTotal",
        view: 'currency'
    }, {
        view: "empty",      // replaces remove
//      text: "Remove",
        label: false
    }],
}


Update [..]
[..removed code from update..]
再利用可能なコードを書いてみてください (アイテムと合計の同様の出力が必要です)。
メソッドが説明していることをメソッドに実行させるようにしてください(コンテナの外側に追加すると、とにかく行が返されます)。
適切な変数名を使用するようにしてください。
さまざまな種類の機能を分離してみてください。
writeCart メソッドでも、「createHeader(..) createItems(..) createTotal(..)」を分割できます。


さらに、セマンティック名を使用するようにしてください。少なくとも「y」変数の名前を「rowIndex」などに変更する必要があります。

アップデート:

createTotalShippingRow: function( TR, TD ) {

    // I think we shouldn't instantiate the item here, but you could test if this works?
    var item = {
        name: "Shipping",
        price: 5,               
//      view: "empty",      // decrement
//      attr: "empty",      // quantity
//      view: "empty",      // increment
        total: this.total(),
//      view: "empty",      // remove
        };

    var rowid = "shipping";

    return createCartTotalShippingRow( item, rowid, TR, TD );
},

createCartTotalShippingRow: function( item, rowclass, rowid, TR, TD ) {
    var row = simpleCart.$create(TR).addClass( rowclass ).attr( 'id', rowid ),
        i = 0,
        cartTotalColumns = settings.cartTotalColumns,
        ln = cartTotalColumns.length,
        column,
        classname;

    for ( ; i < ln; i++ ) {
        column = cartColumn( cartTotalColumns[ i ] );
        classname = "item-" + ( column.attr || ( isString( column.view ) ? column.view : column.label || column.text || "cell" ) ) + " " + column.className;
        content = cartCellView( item, column );
        cell = simpleCart.$create(TD).addClass(classname).html(content);
        row.append(cell);
    }

    return row;
}

アップデート:

ファイル全体..しかし、元のコードで発生したのと同じエラーがあります(メソッド create は存在しません)。しかし、それ自体はあなたの要求とは何の関係もありません。

于 2012-07-31T10:31:10.390 に答える