서문 : 이전에 부트 스트랩 가능한 구성 요소를 소개했을 때 인라인 편집 기능을 언급했지만 기능을 표시 할 목적으로, 나는 이것을 극복하고 죄라고 말했습니다! 최근에도 여전히 프로젝트에서 인라인 편집을 사용할 계획이므로 X-Editable 구성 요소를 다시 연구했습니다. 함정이 약간 닿았으므로 여기에 구덩이를 기록해 봅시다! 부트 스트랩 가능에 대해 알고 싶은 친구는 JS 구성 요소 시리즈 - 테이블 구성 요소 아티팩트 : 부트 스트랩 테이블로 이동할 수 있습니다.
1. X- 편집 가능한 구성 요소 소개
X- 편집 가능한 구성 요소는 편집 가능한 팝업 박스를 만들기위한 플러그인입니다. 부트 스트랩, JQuery UI 및 JQuery의 세 가지 스타일을 지원합니다. 일반적인 효과는 다음과 같습니다.
블로거의 일반적인 스타일에 따르면 첫 번째 스타일은 여기에서 선택해야합니다. 먼저 오픈 소스 주소를 제공하십시오.
X-Editable 오픈 소스 주소 : https://github.com/vitalets/x-editable
X-Editable 문서 주소 : http://vitalets.github.io/x-editable/docs.html
X-Editable Online 데모 : http://vitalets.github.io/x-editable/demo-bs3.html
1. X- 편집 가능한 첫 경험
먼저 부트 스트랩을 기반으로 소스 코드를 로컬 영역으로 다운로드하십시오. 관련 파일에 대한 참조.
<link href = "/content/bootstrap/css/bootstrap.min.css"rel = "스타일 시트"/> <link href = "~/content/bootstrap3-editable/css/bootstrap-editable.css"rel = "Stylesheet"/> script src = "/scripts/jquery-1.9.1.min.js"> </script> <script src = "/content/bootstrap/js/bootstrap.min.js"> </script> <scrc = "~/content/bootstrap3-editable/js/bootstrap-editable.js">
페이지 요소
다음과 같이 코드를 복사하십시오. <a href = "#"id = "username"data-type = "text"data-title = "username"> username </a>
JS 초기화
$ (function () {$ ( '#username'). editable ();});효과 디스플레이
위의 것은 HTML 데이터 속성을 통해 X- 편집 가능한 매개 변수를 설정하는 것입니다. 물론 초기화 중에 매개 변수를 설정할 수도 있습니다. 예를 들어, 나는 빈 태그를 제공합니다 : <a href = "#"id = "username"> username </a>
JS 초기화
function () {$ ( '#username'). editable ({type : "text", // 편집 상자의 유형. 지원 텍스트 유형 | textarea | select | date | checklist 및 기타 제목 : "username", // "username", // doess edit emptytext : // default 텍스트 모드 : // mode vally의 doess edit adit extault aveltex : // 팝업 및 인라인 모드를 지원하는 기본값은 다음과 같습니다. function (value) {// field verification (! $. trim (valk)});효과를 봅니다
약간 더 복잡한 것을 갖도록합시다
<a href = "#"id = "Department"> 부서 </a>를 선택하십시오
$ () {$ ( '#department'). editable ({type : "select", // 편집 상자 유형. 지원 텍스트 | TextArea | Date | Date | CheckList 및 기타 소스 : [{value : 1, "Development Department"}, {value : "Sales Department"}, {value : "value :"}, "},"}, "{value :" 제목 : "부서 선택", // 편집 상자의 제목 : false, // 빈 텍스트 편집을 비활성화하지 않음 : "빈 텍스트", // 빈 값의 기본 텍스트 모드 : // 편집 모드 : 팝업 및 인라인 모드를 지원합니다. }));효과를 봅니다
위의 기사는 일반적으로 사용되는 필드 만 제공합니다. 물론 X- 편집 가능한 구성 요소에는 다른 많은 기능적 매개 변수가 있습니다. 관심이 있으시면 문서를 확인할 수 있습니다. 공식 문서에는 각 매개 변수에 대한 자세한 설명이 있습니다.
2. 인라인 편집을위한 부트 스트랩 가능한 초기 계획
오랫동안 이야기 한 후, 위는 단지 전주입니다. 우리는 궁극적으로 부트 스트랩 가능에서 인라인 편집을 구현하기를 희망합니다. 위 규칙에 따라 X- 편집 가능성을 사용하여 인라인 편집을 구현하려면 테이블 셀에 A 태그가 있어야하며 A 태그가 초기화됩니다. 이 아이디어로 먼저 이런 식으로 시도해 봅시다.
견적 관련 파일
<link href = "/content/bootstrap/css/bootstrap.min.css"rel = "stylesheet"/> <link href = "~/content/bootstrap3-editable/css/css/bootstrap-editable.css"rel = "Stylesheet"/> <link href = "/bootstrap-table.M.M.MeT.M.MeT.M.MeT. rel = "Stylesheet"/> <script src = "/scripts/jquery-1.9.1.min.js"> </script> <scrc = "/content/bootstrap/js/bootstrap.min.js"> </script> <script src = "~/content/bootstrap3- editable/js/bootstrap-editable.js"> </script> <script src = "~/content/bootstrap-table/bootstrap-table.js"> </script> <script src = "/content/bootstrap-table/local/bootstrap-table-zh-cn.js
부트 스트랩 가능의 관련 초기화
<script type = "text/javaScript"> var currow = {}; $ (function () {$ ( "#tb_user"). bootStraptable ({Toolbar : "#ToolBar", Idfield : "ID", Pagination : True, ShowRefresh : true : true, clicktoselect : true, queryparams : function (param) {return {};}, url : ", getitable/getible/getible/getible/getible/getures" {field : "username", 제목 : "사용자 이름", formatter : function (value, row, index) {return "<a href =/"#/"name =/"username/"data-type =/"text/"data-pk =/" + row.id + "/"data-title =/"username/" " + value +"</a> ",}, <}, <, <}, <}, "age",}, {field : "생일", 제목 : "생일", formatter : 함수 (값, 행, 색인) {var date = vale ( 'new' + eval (value) .source) 반환 날짜 ( "yyyyy mm month ddd day}, {field :"deptname ","field : " onclickrow : 함수 (행, $ 요소) {currow = row}, onloadsuccess : function (aa, bb, cc) {$ ( "#tb_user a"). "/편집"백엔드 방법
백그라운드 테스트 방법
public jsonresult getUsers () {var lstres = new List <User> (); lstres.add (new user () {id = "1", username = "zhang san", age = 22, convert.todateTime ( "1994-12-21"), deptid = "1", deptname = "r & d department"}); lstres.add (new user () {id = "2", username = "li si", age = 28, 생일 = convert.todateTime ( "1988-09-09"), deptid = "2", deptname = "Sales Department"}); lstres.add (new user () {id = "3", username = "wrestle coat uncle", age = 40, 생일 = convert.todateTime ( "1976-09-01"), deptid = "2", deptname = "sales department"}); lstres.add (new user () {id = "4", username = "lightning prawn", age = 37, 생일 = convert.todateTime ( "1979-03-12"), deptid = "4", deptName = "Creative Department"}); lstres.add (new user () {id = "5", username = "han meimei", age = 29, birthday = convert.todateTime ( "1987-05-01"), deptid = "5", deptname = "business department"}); Return JSON (LSTRES, JSONREQUESTBEHAVIOR.ALKERGET); } public jsonresult edit (사용자 사용자) {// deserialization json (new {}, jsonrequestbehavior.allowget) 후 반환을 업데이트합니다. }이것은 실제로 원하는 효과를 달성 할 수 있으며 행 내에서 편집 할 수도 있지만 행 내에 편집이 필요한 열이없고 열이 많으면 각 열에 동일한 방식으로 형식을 형성하는 데 걸리나요? 그리고 이런 종류의 글은 분명히 엄격하며 블로거가 받아들이 기가 어렵습니다. 그래서 나는 예를 찾아서 JS 부트 스트랩-테이블-editable.js가 부트 스트랩 가능의 확장에 존재한다는 것을 발견했습니다.
3. 부트 스트랩 가능한 편집 최종 계획
글쎄, 블로거는 위의 것이 여전히 서문임을 인정합니다. 블로거는 이것이 문제를 해결하는 일반적인 아이디어라고 생각하기 때문에, 이러한 사전의 길이는 너무 많을 수 있습니다. 먼저 Bootstrap-table-editable.js 파일을 살펴 보겠습니다.
/** * @Author Zhixin wen <[email protected]> * 확장 : https://github.com/vitalets/x-editable */! function ($) { 'Strict'; $ .extend ($. fn.bootstraptable.defaults, {editable : true, oneditableInit : function () {return false;}, oneDitablesave : function (필드, 행, OldValue, $ el) {return false;}, oneditableshown : function (field, row, $ el, editable) {filord (fortion) 이유) {return false}); $ .extend ($. fn.bootstraptable.constructor.events, { 'editable-init.bs.table': 'oneditableinit', 'editable-save.bs.table': 'oneditablesave', 'editable-shown.bs.table': 'oneditableshown', 'editable-hidden.bs.bs.table'); var bootstraptable = $ .fn.bootstraptable.constructor, _inittable = bootstraptable.prototype.inittable, _initbody = bootstraptable.prototype.initbody; bootstraptable.prototype.inittable = function () {var that = this; _inittable.apply (this, array.prototype.slice.apply (arguments)); if (! this.options.editable) {return; } $ .Each (this.columns, function (i, column) {if (! column.editable) {return; var _formatter = collect.formatter; column.formatter = function (value, row, index) {var result = _formatter? _formatter (value, row, row, ret [ '<a href = + href = + href = + name. ' "', 'data-pk ="' + row [that.options.idfield] + ' +' + ' ",'data-value =" ' + result +' ", '>' + '</a>'] .join ( '');}); }; bootstraptable.prototype.initbody = function () {var that = this; _initbody.apply (this, array.prototype.slice.apply (arguments)); if (! this.options.editable) {return; } $ .Each (this.columns, function (i, column) {if (! column.editable) {return;} that. $ body.find ( 'a [data-name = "' + column.field + '"]'). editable (column.editable) .off ( 'save', on index (e, params =) that. $ (this). 데이터 ( 'tr [data-index]). data ('index '), oldvalue = row [column.field]; ' "]'). 편집 가능 (column.editable) .off ( 'showing'). on ( 'showing', function (e, editable) {var data = that.getData (), index = $ (this) .parents ( 'tr [data-index]'), data ( 'index'), row = data [index]; that.trigger ( 'editable-shown', velfield, Row, Row, Row, Row, Row, indite); that. $ body.find ( 'a [data-name = "' + column.field.field + '"]. that.triger ( '편집 가능한 숨겨진', 열, $ (this),}); this.trigger ( 'editable-init'); };} (jQuery);
이 JS는 실제로 X- 편집 가능성을 간단하게 캡슐화하여 열의 편집 가능한 속성을 추가하고 일부 이벤트를 편집하고 저장합니다. 이것으로 기초로, 우리가 업계에서 편집 한 코드는 이와 같이되었습니다.
참조 해야하는 파일은 다음과 같습니다.
<link href = "/content/bootstrap/css/bootstrap.min.css"rel = "stylesheet"/> <link href = "~/content/bootstrap3-editable/css/css/bootstrap-editable.css"rel = "Stylesheet"/> <link href = "/bootstrap-table.M.M.MeT.M.MeT.M.MeT. rel = "Stylesheet"/> <script src = "/scripts/jquery-1.9.1.min.js"> </script> <scrc = "/content/bootstrap/js/bootstrap.min.js"> </script> <script src = "~/content/bootstrap3-editable/js/bootstrap-editable.js"> </script> <script src = "~/content/bootstrap-table/bootstrap-table.js"> </script> <script src = "/content/bootstrap-table/locip/bootstrap-table-zh-cn.j src = "/content/bootstrap-table/src ="~/content/bootstrap-table/eptensions/editable/bootstrap-table-editable.js "> </script>
1. 텍스트 상자
$ (function () {$ ( "#tb_user"). bootStraptable ({Toolbar : "#ToolBar", Idfield : "ID", Pagination : True, ShowRefresh : true : true, clicktoselect : true, queryparams : function (param) {return {};}, url : ", getitable/getible/getible/getible/getible/getures" {field : "username", 제목 : "사용자 이름", 편집 가능 : {type : 'text', 제목 : 'username', validate : function (! v) return 'username}}}}, {field : "Age :"Age ", {생일 :", 제목 : " eval ( 'new' + eval (value) .source) return date.format ( "yyyy-mm-dd"), {field : "deptname", title : "department"}, {field : "Hobby", "Hobby"}], OneditableSave : function (field, Row, OldValue, $ el) "/편집", 데이터 유형 : 'JSON', 성공 (데이터, 상태) {alert ( 'Data의 성공 제출');배경의 해당 업데이트 방법
public jsonresult edit (사용자 사용자) {// 업데이트 엔티티 return json (new {}, jsonrequestbehavior.allowget); }테스트 후 사용자 이름 열을 자유롭게 편집 할 수 있습니다. 마찬가지로 연령 열도 이것으로 변경할 수 있습니다.
{field : "age", 제목 : "Age", 편집 가능 : {type : 'text', 제목 : 'Age', Validate : function (v) {if (isnan (isnan (v)) return 'age are number'; var age = parseint (v); (Age <= 0) return '나이가 긍정적 인 정수 여야한다'. }}}나머지는 수정이 필요하지 않습니다.
코드 설명 : 편집 가능한 매개 변수는 위의 초기 열 속성에서 구성됩니다. 여기서 각 열의 편집 가능한 속성에 해당하는 JSON 객체는 X-editable의 초기화 된 JSON 객체입니다. 즉, x- 편집 가능성을 초기화 할 때 어떤 속성을 구성 할 수 있는지, 열의 편집 가능한 속성에서 동일하게 구성 할 수 있으므로 사용하기가 훨씬 더 즐겁습니다. 편집 된 제출 방법은 균일하게 처리하기 위해 oneeditablesave 이벤트에 균일하게 배치됩니다.
2. 시간 선택 상자
위의 지식이 기초로 생일 열을 초기화하겠습니다.
{field : "생일", 제목 : "생일", Formatter : 함수 (값, 행, 인덱스) {var date = val ( 'new' + eval (value) .source) 반환 날짜. 형식 ( "yyyy-mm-dd"); }, editable : {type : 'date', 제목 : '생일'}}효과를 얻기 위해 다른 곳에서는 수정이 필요하지 않습니다.
이것은 X- 편집 가능한 기본 스타일입니다. 행복하지 않으면 직접 구성 할 수 있습니다. X- editable은 다음과 같이 날짜 상자를 구성하기위한 많은 매개 변수를 제공합니다.
물론 시간이 시간, 분 및 초에 정확한 경우 DateTime 유형의 편집 상자를 사용할 수 있습니다. 다음은 공식 시간 프레임 편집 효과로 꽤 좋아 보입니다.
3. 상자를 당기십시오
양식 편집에는 또 다른 중요한 태그가 있습니다. 위에서 언급했듯이 X-editable은 드롭 다운 상자 편집 모드를 제공합니다. 예를 들어, 우리 부서 의이 열을 편집 할 수 있습니다.
{field : "deptid", title : "department", editable : {type : 'select', title : 'department :'department : 'source : [{value : "1", text : "r & d department"}, {value : "2", "sales department"}, {value : "3", 텍스트 : "관리 부서"}}}}}}}}효과를 얻으십시오
물론, 데이터 소스를 로컬로 설정하는이 방법은 우리의 요구를 충족시킬 수 없습니다. 많은 경우 드롭 다운 박스의 옵션이 데이터베이스에서 원격으로 얻어지기 때문입니다. 물론 X-editable도 우리에게 고려되었습니다. 예를 들어, 우리는 이것을 쓸 수 있습니다.
{field : "deptid", 제목 : "부서", 편집 가능 : {type : 'select', 제목 : '부서', source : function () {var result = []; $ .ajax ({url : '/editable/getDepartments', Async : False, type : "get", data : {}, success : function (data, status) {$ .Each (data, function (key, value) {result.push ({value : value.id, text : value.name});}); 반환 결과; }}}}백그라운드에서 메소드를 구성합니다
public jsonresult getDepartments () {var lstres = new List <Search> (); lstres.add (새 부서 () {id = "1", name = "r & d department"}); lstres.add (새 부서 () {id = "2", name = "sales department"}); lstres.add (새 부서 () {id = "3", name = "관리 부서"}); lstres.add (새 부서 () {id = "4", name = "Creative Department"}); lstres.add (new Department () {id = "5", name = "Business Unit"}); Return JSON (LSTRES, JSONREQUESTBEHAVIOR.ALKERGET); }또한 우리가 원하는 결과를 얻을 수 있습니다.
코드 질문 : 다음은 설명해야 할 사항이 있습니다. 신중한 정원사는 우리의 분야가 여기에서 "Deptid"라는 것을 발견했을 수도 있습니다. 왜 우리는 왜 DeptName 대신 Deptid를 구성해야합니까? 데이터 소스의 값 값에 해당해야하기 때문에 매우 간단합니다.
4. 확인란
위에서 언급 한 일반적인 편집 상자 외에도 X-editable은 체크 박스 그룹의 편집을 제공합니다. 예를 들어:
{필드 : "취미", 제목 : "호스트", 편집 가능 : {유형 : "체크리스트", 분리기 : ", 소스 : [값 : 'bsb', 텍스트 : '농구'}, 'value :'ftb ','football '}, {value :'wsm ','텍스트 : '수영'},}}}}}}.효과를 얻으십시오 :
물론 원격 데이터가있는 경우 위와 유사한 메소드를 사용하여 검색 할 수도 있습니다.
5. "유령은 결코 사라지지 않습니다"select2
위의 확인란에 대해 말하면, 블로거는 다중 선택과 같은 것들을 생각할 수 없었기 때문에 X-Editable 문서를 검색했으며 MultiSelect를 지원하지는 않지만 Select2를 지원한다는 것을 알았습니다. 이것이 좋은 소식인지 모르겠습니다. Blogger의 자체 사용 경험과 기술 커뮤니케이션 그룹의 채팅 경험을 바탕으로 많은 사람들이 Select2를 사용할 때 다양한 스타일 문제를 겪었으며 해결하기가 쉽지 않다는 것을 알았습니다.
X-editable은 select2를 지원하기 때문에 시도해 봅시다. 어쨌든, 공식 데모는 꽤 좋습니다. 다음은 공식 데모를 사용하는 예입니다.
긴장된 분위기로 블로거는 스스로 시도했습니다.
참조 select2 파일
<link href = "~/content/select2-bootstrap.css"rel = "스타일"/> <link href = "~/content/select2-master/dist/css/select2.min.css"rel = "Stylesheet"/<script src = "~/content/select2-master/js/jss/script2.full.min.Min.Min.Min.Min.Min.Min.Min.Min
코드 시도
{Field : "Hobby", 제목 : "취미", 편집 가능 : {type : 'select2', 제목 : 'Hobby', 'Hobby', 배치 : 'TOP', 성공 : 기능 (응답, NewValue) {Debugger; }, 오류 : 함수 (응답, newValue) {디버거; }, url : function (params) {디버거; }, 출처 : [{id : 'bsb', text : 'basketball'}, {id : 'ftb', text : 'football'}, {id : 'wsm', text : 'swimming'}], inputclass : '입력-래지', select2 : {alleter clear : true, multure : true,}}}결과를 얻으십시오 :
선택된 SELFICE 값은 일반적으로 배경으로 전달 될 수 없다는 것이 밝혀졌습니다. 어쨌든 블로거는 다양한 매개 변수를 시도했으며 공식 데모에 따르면 모두 실패로 끝났습니다. 공식 데모가 어떻게 성공했는지 모르겠습니다. 이 질문은 먼저 버려집니다. 그것을 사용하는 정원사가 있다면, 수정하고 대답하십시오. 블로거가 앞으로이 문제를 해결하면 여기에서도 업데이트 될 것입니다.
4. 요약
또 다른 문제는 편집 및 제출이 완료된 후 블로거가 프로젝트에서 문제를 겪었다는 것입니다. 제출 후 텍스트 내용이 너무 많으면 테이블 헤드의 TH 폭과 TD의 TD 폭이 옳지 않기 때문에 매우 역겨워 보입니다. 그러나 데모를 작성할 때이 문제를 발견하지 못했습니다. 다음은 해결책입니다.
한 문장으로 문제를 해결하십시오!
이 기사에서는 X- 편집 가능성과 결합 된 부트 스트랩 가능의 사용을 소개합니다. 이 기사의 많은 질문은 블로거의 사용 경험을 바탕으로 설명됩니다. 당신이 그것을 사용할 계획이라면, 당신은 그것을 시도 할 수도 있습니다.
여전히 심도있게 공부하고 싶다면 여기를 클릭하여 3 가지 흥미로운 주제를 공부하고 첨부 할 수 있습니다.
부트 스트랩 학습 튜토리얼
부트 스트랩 실용 튜토리얼
부트 스트랩 플러그인 사용 튜토리얼
위는이 기사에 관한 것입니다. JS 테이블 구성 요소 아티팩트 부트 스트랩 테이블을 더 잘 배우는 데 도움이되기를 바랍니다.