2013-03-25 67 views
1

如何覆蓋用戶選擇或鍵入的值並將其放入觸發輸入的功能?覆蓋KendoUI自動完成選定值

E.g.我的數據源是:

[ 
    { 
     id: 1, 
     name: "Tim" 
    }, 
    { 
     id: 2, 
     name: "Bob" 
    } 
] 

我想自動完成返回:

<span class="my-class">Tim</span> 

而不是僅僅Tim

我用這作爲我的KendoUI網格,單元格的編輯,所以我一次該單元不再被編輯它的HTML是這樣的:

<td role="gridcell"><span class="my-class">Tim</span></td> 

下面是網格列編輯:

function partNumberScanner(container, options) 
{ 
    partId = options.model.id; 
    var autoC = $('<input class="k-input data-value-field="id" k-textbox part-sniffer" data-bind="value:' + options.field + '"/>') 
    autoC.appendTo(container); 
    autoC.kendoAutoComplete({ 
    dataTextField: "idealForm", 
    dataValueField: "id", 
    delay: 50, 
    dataSource: { 
     serverFiltering: true, 
     transport: { 
     read: { 
      url: ROOT+"part/fetch-parts", 
      type: "POST", 
      dataType: "json" 
     } 
     }, 
     error: function(e) { 
     alert(e.errorThrown+"\n"+e.status+"\n"+e.xhr.responseText) ; 
     }, 
     schema: { 
     id: "id", 
     idealForm: "idealForm", 
     manufacturer: "manufacturer" 
     } 
    }, 
    minLength: 5, 
    filter: "contains", 
    placeholder: "Start typing...", 
    //template: '#= "<li class=\'k-item\' role=\'option\' data-manufacturer=\'"+manufacturer+"\'>"+idealForm+"</li>" #', 
    select: function(e) 
    { 
     matchedPartData = this.dataItem(e.item.index()); 
     manufacturer = matchedPartData.manufacturer; 
    }, 
    change: function(e) { 
    // selectedPart = this.value(); 
     $.each(partData, function(i, v){ 
     if(partId == v.id) 
     { 
      targetId = i ; 
      return false 
     } 
     }) 
     partData[targetId].manufacturer = manufacturer; 
     grid.dataSource.sync(); 


    } 
    }); 
} 

問題是change回調被調用,而細胞仍處於編輯模式,所以我需要改變是從change返回的值。


我正在一些地方在零件號的用戶類型,如果被發現的部分開始提供用戶所鍵入的,它們被顯示在自動完成,並且可以選擇。

一旦輸入值並且網格單元格離開編輯模式,引導程序彈出窗口就需要放置在單元格中的值上。

希望我已經解釋得很好。


我試過類似的東西,但仍然無法讓它工作。我有:

template: "<span data-content=''>#= partNumber #</span>" 

我需要發生一次做出選擇,一個AJAX調用時其帶回那個被放入細胞的數據內容ATTR數據。


change: function(e) { 
... 
options.model.set(options.field, '<span class="part-intel">'+this.value()+'</span>'); 
grid.dataSource.sync(); 
$.ajax({ 
      url: ROOT+'part/partAnalysis', 
      async: false, 
      success: function(data) 
      { 
      element = container.find('span.part-intel'); 
      /*element.popover({ 
      html: true, 
      content: data 
      })*/ 
      alert(element.html()) // Shows undefined 
      // element.popover('show'); 
      } 
     }) 
}) 
+0

你在'Bob'元素之前錯過了一個開放的花括號,不是嗎? – OnaBai 2013-03-25 09:38:50

+0

@OnaBai對不起,修正了這個問題。這只是一個例子。 – imperium2335 2013-03-25 09:43:07

+0

是的,我知道,順便說一下,你正在做很漂亮的東西... – OnaBai 2013-03-25 09:52:02

回答

1

用於設置值,你應該使用value功能。從change事件處理中這樣做是:

change: function(e) { 
    e.sender.value("New Value"); 
} 

編輯因爲你的情況,你有,因爲在編輯器功能,可以訪問該行模式partNumberScanner你收到它options,你可以簡單地做:

change: function(e) { 
    options.model.set(options.field, "New Value"); 
} 
+0

它仍然將選定的值放入單元格中,而不是 e.sender.value(「New Value」); 如果我提醒它,我會得到新的價值,它只是不返回它:( – imperium2335 2013-03-25 12:40:32

+0

檢查**編輯**以獲取更多信息 – OnaBai 2013-03-25 22:07:01

+0

這使我獲得了價值,但我如何在k後附加一個回叫-input input blurs?請參閱我編輯的內容,當我回想編輯單元格時,內容顯示'新值'只顯示「新價值」。 – imperium2335 2013-03-27 06:38:58

相關問題