2017-07-03 13 views
0

を選択して編集テンプレートに切り替えます。 それは私が新しい項目を選択する前に、編集されたアイテムの「キャンセル」アイコンをクリックした場合にのみ、正常に動作します。剣道のListView:私はそれはその「編集」テンプレートに切り替えるようにする項目を選択(クリック)したい<a href="http://dojo.telerik.com/AROMAZ" rel="nofollow noreferrer">http://dojo.telerik.com/AROMAZ</a></p> <p>:私はこの単純な例の問題を説明していたいアイテム

私は手動で前の選択を解除せずに新しい項目を選択した場合、それは動作を停止します。

私は何を頼りにするも、「キャンセル」ボタンを持っていません。

これは簡単です。編集するアイテムをクリックします( '編集'テンプレートに切り替えるには)。 1つを選択すると、前に選択した項目が選択解除されます。すなわち1つで編集する。

手動で別のものを編集する前に項目を自動選択/編集解除する方法が見つかりませんでした。

EDIT 1:予想通り

this.edit(selected)this.cancel();を配置するには動作しません。このコードは、オリジナルのdojoの例ではコメントアウトされています。あなたが新しい項目を選択すると

は、以前に選択した項目は未編集された(これは結構です)を取得します。ただし、新しく選択された項目は編集されず(望ましくない動作)、例外がスローされます(望ましくない動作)。

例外は次のとおりです。

Uncaught TypeError: Cannot read property 'uid' of undefined 
    at init.edit (kendo.all.js:53910) 
    at init.change (VM1332 result:42) 
    at init.trigger (kendo.all.js:124) 
    at init.change (kendo.all.js:53707) 
    at init.trigger (kendo.all.js:124) 
    at init._notify (kendo.all.js:25836) 
    at init.value (kendo.all.js:25811) 
    at init._tap (kendo.all.js:25725) 
    at init.d (jquery-1.12.4.min.js:2) 
    at init.trigger (kendo.all.js:124) 

this.cancel();の添加は、この修正道場に例示されている:http://dojo.telerik.com/AROMAZ/7

注:ブラウザの開発ツールを開いて、例外を表示するには(つまり、Shiftキー+センター+ I

EDIT)Chromeで2:

P this.edit(selected)this.save();レーシングは、あまりにも例外をスローすることができます。例:http://jsfiddle.net/horacioj/mkJTG/417/

答えて

0

私は私が望むように私はそれが正確に働いてしまったと思う:編集モードの間、あなたは同じ要素をクリックしたときに例外を回避するために

EDIT

http://jsfiddle.net/horacioj/t45n0hdj/

this.edit()の前にthis.cancel();を示します。 this.select();に失敗した場合(したがって、.edit()がスローされ、例外が発生する場合)、.select()はインデックス(またはid)でアイテムを検索します。これにより例外が発生するのを防ぎます。

編集された最後のアイテムを覚えている変数は、アイテムが既に選択されている場合(つまり、同じアイテムをクリックすると編集モードを維持するのではなくその状態を切り替える)、アイテムを編集したままにするのを防ぎます。基本的には

var lastEditedIndex = -1; 

$("#listView").kendoListView({ 
    .... 
    .... 
    change: function(e) { 
    var index = this.select().index(); 
    this.cancel(); 
    var selected = this.select(); 
    if (selected.length === 1) { 
     this.edit(selected); 
     lastEditedIndex = index; 
    } else { 
     selectByIndex(index); 
    } 
    } 


function selectByIndex(index) { 
    if (lastEditedIndex === index) return; 

    var listView = $('#listView').data('kendoListView'); 
    var itemWithID = listView.dataSource.at(index); 
    listView.select(listView.element.children('[data-uid="' + itemWithID.uid + '"]').first()); 
    lastEditedIndex = index; 
} 
0

の代わりに使用しようとキャンセル:

this.save(); 

this.edit(selected); 

前には、このソリューションは、完全にあなたの要望に合うようです。

$("#listView").kendoListView({ 
dataSource: dataSource, 
template: "<div style='padding: 10px; border: 1px solid red;'>#= Id # </div>", 
editTemplate: "<div style='padding: 10px; border: 1px solid red;'>EDITING #= Id # </div>", 
selectable: "single", 
change: function(e) { 
    var index = this.select().index();   
    var dataItem = this.dataSource.at(index); 

    if(e.sender.LastIndex != index) { 
     this.save();   
     this.edit(this.select());   
    }   

    e.sender.LastIndex = index; 
}}); 
+0

残念ながら、それは動作しません。私は理由を説明するために "EDIT 1"を追加しました。 – horacioj

+0

私はちょうど解決策を編集しました。それは動作しており、例外もスローされていません。もちろん、変更イベントが発生するたびに同期したくない場合は、保存イベントを防止して同期を手動で呼び出す必要があります。 –

+0

.save()は、望ましくないsave()をトリガーするだけでなく、例外もスローすることができます( "EDIT 2"を追加)。私は、.cancel()に基づいた実用的な解決策があると思います。私は新しい答えとしてそれを追加しています。 – horacioj

関連する問題

 関連する問題