0

Dojo を使用して ASP.Net MVC4 で作業しています。HTML テーブルに新しい行を追加するときに奇妙な問題が発生します。行の追加と削除をサポートするテーブルが必要であり、内部のテキスト ボックスは dojo スタイルにする必要があります。投稿http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/広告を参照して、同じものを作成しようとしました。私のコードを説明しましょう。以下は私の見解です

@section scripts {
    <script type="text/javascript">
        require(["dojo/parser", "dijit/form/TextBox", "dijit/form/Button"]);
    </script>
}
 <table id="servicesTable">
            <tr>
                <th>
                    <label id="lblSelectService">
                        Select</label>
                </th>
                <th>
                    <label id="lblServiceName">
                        Name</label>
                </th>
                <th>
                    <label id="lblTitle">
                        AE Title</label>
                </th>

            </tr>
            @for (int i = 0; i < Model.Services.Count; i++)
            {
                @Html.Partial("_ServiceRow", Model.Services[i])
            }
        </table>

各行をレンダリングするための私の部分的なビューは以下のようなものです

@model WebUI.Models.RemDevServiceViewModel
    <tr>
        <td>
            @Html.CheckBoxFor(x => x.IsMarked,
                     new { id = @String.Format("Service[{0}]IsMarked", @Model.ID) })
        </td>
        <td>
            <input style="width: 100px; id="Service[@Model.ID]Name"
        name="Service[@Model.ID].Name" type="text"
                     data-dojo-type="dijit/form/TextBox" value="@Model.Name"/>
        </td>
        <td>
            <input style="width: 100px;" id="Service[@Model.ID]Title" 
                        data-dojo-type="dijit/form/TextBox"
                        name="Service[@Model.ID].Title" type="text" 
value="@Model.Title" />
        </td>
    </tr>

テーブルに新しい行を追加する追加ボタンがあります。私が直面している問題は、新しい行が dojo スタイルを取得せず、通常のテキスト ボックスとしてレンダリングされることです。最初にロードされた行は Dojo スタイルのテキスト ボックスとしてレンダリングされますが、新しく追加された行はそうではありません。新しい行を追加する私のjquery関数は以下のようなものです

function addNewService() {
    $.ajax({
        url: rootPath + "MyController/AddNewService",
        type: "get",
        cache: false,
        success: function (html) {

            $("#servicesTable tbody").append(html);
        },
        error: function (ts) {
            alert("Error while adding services");
        }
    });
}

誰でもこれを解決する方法を教えてもらえますか? Dojo grid の存在は認識しています。モデルバインディングを利用したいので、このスタイルに従いたい

4

2 に答える 2

0

お返事ありがとうございます。あなたのコードは正確には機能しませんでしたが、私はアイデアを得て、以下のコードが機能しています。私が自分の質問に答えていると思わないでください。コードを適切にフォーマットしたいので、このビューを使用します。もう一度どうもありがとう

success: function (html) {
        var newNodes = $(html).appendTo("#servicesTable tbody");
        require(["dojo/_base/array", "dojo/parser"], function (array, parser) {
            array.forEach(newNodes, function (node, i) {
             parser.parse(node);
            });
        });
于 2013-04-22T12:48:44.483 に答える
0

追加されたノードでパーサーを実行してみてください。ページにjqueryも真剣にロードしていますか?とにかく、あなたが得たコードでは、追加したばかりのノードを選択するのはちょっと難しいですが、成功メソッド内に次を入れるとうまくいくかもしれません.

var newNodes = $(html).appendTo("#servicesTable tbody");
require(["dojo/parser"], function(parser){
    newNodes.forEach(function(node){
        parser.parse(node);
    });
});

すでに解析されたノードを解析すると、パーサーはエラーをスローします。また、古いブラウザーをサポートする必要がある場合は、forEach を標準の for ループに置き換える必要があります。

于 2013-04-21T19:36:42.393 に答える