2015-09-10 94 views
1

我正在使用Javascript创建一个列表。但同时加入栏列出它越来越错误Sharepoint - Uncaught TypeError:无法设置属性'newColumns'undefined

function createlist() { 
    // Create a generic SharePoint list with the name that the user specifies. 
    var listCreationInfo = new SP.ListCreationInformation(); 
    var listTitle = "MyList"; 
    listCreationInfo.set_title(listTitle); 
    listCreationInfo.set_templateType(SP.ListTemplateType.genericList); 
    lists = web.get_lists(); 
    var newList = lists.add(listCreationInfo); 

    var newCols = [ "<Field Name='PageText' DisplayName='Page Text' Type='Note' RichText='TRUE' RichTextMode='FullHtml' NumLines='10' />", 
    true]; 

    var numberCols = newCols.length; 
    for (var i = 0; i < numberCols; i++) { 
      this.newColumns= newList.get_fields().addFieldAsXml(newCols[i],true,SP.AddFieldOptions.defaultValue); 
    } 


    context.load(numberCols); 
    context.executeQueryAsync(onListCreationSuccess, onListCreationFail); 
} 

Uncaught TypeError: Cannot set property 'newColumns' of undefined

createlist @ App.js:57

(anonymous function) @ App.js:18

b.Callbacks.c @ jquery-1.9.1.min.js:3

b.Callbacks.p.fireWith @ jquery-1.9.1.min.js:3

b.extend.ready @ jquery-1.9.1.min.js:3 H @ jquery-1.9.1.min.js:3

帮我我在哪里犯错

回答

1

的例子包含某些错误/错字

  • SP.FieldCollection.addFieldAsXml函数接受字段XML(string type)作为第一个参数,但要从newCols阵列

    SP.ClientContext.load函数传递布尔值(!)接受SP.ClientObject对象,但在行:context.load(numberCols);numberCols是一个数值

修改例

下面提供的例子略加修改的版本:

function createlist(listTitle,fieldDefs,success,error) { 

    var ctx = SP.ClientContext.get_current(); 
    var web = ctx.get_web(); 
    var listCreationInfo = new SP.ListCreationInformation(); 
    listCreationInfo.set_title(listTitle); 
    listCreationInfo.set_templateType(SP.ListTemplateType.genericList); 
    var list = web.get_lists().add(listCreationInfo); 
    var fields = []; 
    for (var i = 0; i < fieldDefs.length; i++) { 
     var field = list.get_fields().addFieldAsXml(fieldDefs[i],true,SP.AddFieldOptions.defaultValue); 
     fields.push(field); 
     ctx.load(field); 
    } 
    ctx.executeQueryAsync(
     function(){ 
      success(fields); 
     }, error); 
} 

使用

var listTitle = 'Requests'; 
var fieldDefs = [ "<Field Name='RequestDesc' DisplayName='Request Description' Type='Note' RichText='TRUE' RichTextMode='FullHtml' NumLines='10' />"]; 

createlist(listTitle,fieldDefs, 
    function(fields){ 
     console.log('List has been created successfully'); 
    }, 
    function(sender,args) 
    { 
     console.log(args.get_message()); 
    }); 
1

我无法测试的代码,但我看到了以下问题:

1)添加新的列表后,你应该加载它:

var newList = lists.add(listCreationInfo); 
context.load(newList); 

2)为什么你在数组中有真值与你想添加的列?我建议删除它。或者,如果你想创建一个列,请执行以下操作:取而代之的是循环的

var newCol = "<Field Name='PageText' DisplayName='Page Text' Type='Note' RichText='TRUE' RichTextMode='FullHtml' NumLines='10' />"; 

3),这样做:

var newColumn = newList.get_fields().addFieldAsXml(newCol,true,SP.AddFieldOptions.defaultValue); 

4)呼叫负载方法对新列,并执行查询:

context.load(newColumn); 
context.executeQueryAsync(onListCreationSuccess, onListCreationFail); 

你分别致电context.load(numberCols);其中numberCols是要创建的列数组的长度 - 由于错误的代码没有达到该行,但它会在这里失败,因为我们二。

我希望有帮助。

相关问题