2

変更した階層を保存できるように、コントローラに必要な情報を保持するために、各ツリー ノードに ID 属性を割り当てました。

ただし、ノードをドロップすると、Id 属性が削除されます。これがバグなのか、何か間違ったことをしているのか、それとも開発者が意図したとおりに機能しているのかはわかりません。

アラート ウィンドウのスクリーンショット (以下のコード) と、Firebug から生成された Html の 2 つのショットを添付しました。1 つはドロップ前で、もう 1 つはドロップ後です。

@(Html.Kendo().TreeView()
.Name("CompanyHierarchy")
.Events(events => events
    .DragEnd("HierarchyDragEnd")
)
.BindTo(Model.Hierarchy as System.Collections.IEnumerable, mappings =>
{
    mappings.For<Models.EnterpriseChildModel>(binding => binding
        .Children(c => c.Children)
        .ItemDataBound((item, c) =>
        {
            item.Text = c.Name;
            item.HtmlAttributes.Add("Id", c.EnterpriseID.ToString());
        })
    );
})
.DragAndDrop(true))

警告ウィンドウに ID がありません ドロップ前に Html に ID を表示する Firebug ドロップ後に Html に ID がないことを示す Firebug

4

1 に答える 1

1

解決策があります。これは、Telerik チーム メンバーによって剣道フォーラムで提供されました。変更したコードも以下に掲載します。

ドラッグ アンド ドロップ操作の後、HtmlAttributes は保持されません。この特定のケースでは、アイテムに Id を追加し、クライアントの dataItem メソッドを介してアクセスするのが最善です。

改訂されたコード:

ID を dataItem に追加します。

    @(Html.Kendo().TreeView()
    .Name("CompanyHierarchy")
    .Events(events => events
        .DragEnd("HierarchyDragEnd")
    )
    .BindTo(Model.Hierarchy as System.Collections.IEnumerable, mappings =>
    {
        mappings.For<Models.EnterpriseChildModel>(binding => binding
            .Children(c => c.Children)
            .ItemDataBound((item, c) =>
            {
                item.Text = c.Name;
                item.Id = c.EnterpriseID.ToString();
            })
        );
    })
    .DragAndDrop(true)
)

dataItem から情報を取得します。

        function HierarchyDragEnd(e) {
        setTimeout(function () {
            var originDataItem = $("#CompanyHierarchy").data('kendoTreeView').dataItem(e.sourceNode);
            var originNodeId = originDataItem.id;
            var originNodeText = originDataItem.text;
            var destinationDataItem = $("#CompanyHierarchy").data('kendoTreeView').dataItem(e.destinationNode);
            var destinationNodeId = destinationDataItem.id;
            var destinationNodeText = destinationDataItem.text;

            var dropPosition = e.dropPosition;
        }, 100);
    }
于 2012-10-05T14:56:14.123 に答える