Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在js或JQuery中获取小部件实例pfp:dataTable_Javascript_Jquery_Primefaces_Datatable - Fatal编程技术网

Javascript 如何在js或JQuery中获取小部件实例pfp:dataTable

Javascript 如何在js或JQuery中获取小部件实例pfp:dataTable,javascript,jquery,primefaces,datatable,Javascript,Jquery,Primefaces,Datatable,在JSF中,我有多个嵌套在外部p:dataTable中的p:dataTable 当用户单击任何内部数据表中的一行时,将选中该行,而取消选中上一行 我使用primeface datatable小部件选择该小部件的行和取消选择该小部件的所有行 <script type="text/javascript"> function selectCurrentRow(table,index){ //How to unselect ALL tables?

在JSF中,我有多个嵌套在外部
p:dataTable
中的
p:dataTable

当用户单击任何内部数据表中的一行时,将选中该行,而取消选中上一行

我使用primeface datatable小部件选择该小部件的行和取消选择该小部件的所有行

<script type="text/javascript">
        function selectCurrentRow(table,index){
            //How to unselect ALL tables?
            table.unselectAllRows();

            table.selectRow(index ,false);
            }
    </script>
豆子

私有列表用户列表;
私有列表事件列表;
私人日期[]工作日;
私有字符串selectedEvent;
私人地图;
公共列表getEventList(字符串eid,日期){
返回map.get(eid).get(日期);
}
public void onRowSelect(){
//做一些
}
@施工后
公共void init(){
generateWeekdays(新日期());
userList=newarraylist();
userList.add(“John”);
用户列表。添加(“Allice”);
userList.add(“Bob”);
eventList=新的ArrayList();
事件列表。添加(“事件A”);
事件列表。添加(“事件B”);
事件列表。添加(“事件C”);
事件列表。添加(“事件D”);
map=newhashmap();
for(字符串用户:userList){
Map week=新的HashMap();
适用于(日期:工作日){
列表=新的ArrayList();
周。放置(日期、列表);
}
map.put(用户,周);
}
getEventList(“John”,工作日[0]).add(eventList.get(0));
getEventList(“John”,工作日[0]).add(eventList.get(1));
getEventList(“John”,工作日[2]).add(eventList.get(3));
getEventList(“John”,工作日[3]).add(eventList.get(1));
getEventList(“John”,工作日[3]).add(eventList.get(3));
getEventList(“Bob”,工作日[2]).add(eventList.get(1));
getEventList(“Bob”,工作日[2]).add(eventList.get(3));
}
私人作废生成工作日(日期从){
Calendar cal=Calendar.getInstance();
校准设定时间(从);
工作日=新日期[7];
对于(int i=0;i<7;i++){
cal.add(日历日/月,1);
平日[i]=cal.getTime();
}
}

widgetVar和jquery选择器之间有直接连接。小部件变量具有以下属性:

  • id:html元素的id属性
  • jqId:jquery选择器
  • jq:jquery对象
您可以浏览所有小部件并比较它们的id。但是小部件变量名也有一个约定。如果未指定
widgetVar
,则小部件将是:

var widgetVar = 'widget_' + element.id.replace(/:/g,'_');

我用的是PrimeFaces3.5

我找到了一个解决办法,但不知道是否是个好办法

我最初的想法是首先找到JQuery对象,然后获取它的小部件对象,我尝试了
$('.innerTable').first().data()
,但失败了

然后,我假设primeface将其小部件声明为全局变量,因此我尝试了
Object.keys(window)
,在那里我找到了widgetVar名称。(在本例中使用前缀=“eventTableVar”)。因此,下一步是将该字符串类型名称设置为widget对象:
window[name]
eval(name)
都将完成这项工作

因此,以下是我的解决方法:

function selectCurrentRow(table,index){ 
    // get all global object keys since primeface put its widget as global
   var keys=Object.keys(window),eventTableVar; 
   // Iterate over global objects to find targeted tables witn String startwidth match 
   for(var i=0;i<keys.length;i++){
    if(keys[i].lastIndexOf("eventTableVar_",0)==0){
     //Get instance and do what you want.
     eventTableVar=window[ keys[ i ] ];
     eventTableVar.unselectAllRows();
    }
   }
   table.selectRow(index ,false);
  };
函数selectCurrentRow(表,索引){
//获取所有全局对象键,因为primeface将其小部件设置为全局
var keys=Object.keys(窗口),eventTableVar;
//在全局对象上迭代,以查找字符串startwidth匹配的目标表

对于(var i=0;iThanks for the response,实际上我想做的是从jquery对象获取小部件。我尝试了
$('.myTable').data()
,但没有成功。我假设primeface将其所有小部件声明为全局变量,并且该小部件和dom之间没有绑定,因此无法从其dom或jquery对象获取小部件。
private List<String> userList;
    private List<String> eventList;
    private Date[] weekdays;

    private String selectedEvent;

    private Map<String, Map<Date, List<String>>> map;

    public List<String> getEventList(String eid, Date date) {
        return map.get(eid).get(date);
    }

    public void onRowSelect(){
        //do some
    }

    @PostConstruct
    public void init() {
        generateWeekdays(new Date());

        userList = new ArrayList<String>();
        userList.add("John");
        userList.add("Allice");
        userList.add("Bob");

        eventList = new ArrayList<String>();
        eventList.add("Event A");
        eventList.add("Event B");
        eventList.add("Event C");
        eventList.add("Event D");

        map=new HashMap<String, Map<Date, List<String>>> ();
        for(String user:userList){
            Map<Date, List<String>> week=new HashMap<Date, List<String>>();
            for(Date date:weekdays){
                List<String> list=new ArrayList<String>();
                week.put(date, list);
            }
            map.put(user, week);
        }
        getEventList("John",weekdays[0]).add(eventList.get(0));
        getEventList("John",weekdays[0]).add(eventList.get(1));
        getEventList("John",weekdays[2]).add(eventList.get(3));
        getEventList("John",weekdays[3]).add(eventList.get(1));
        getEventList("John",weekdays[3]).add(eventList.get(3));

        getEventList("Bob",weekdays[2]).add(eventList.get(1));
        getEventList("Bob",weekdays[2]).add(eventList.get(3));
    }


    private void generateWeekdays(Date from) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(from);
        weekdays = new Date[7];
        for (int i = 0; i < 7; i++) {
            cal.add(Calendar.DAY_OF_MONTH, 1);
            weekdays[i] = cal.getTime();
        }
    }
var widgetVar = 'widget_' + element.id.replace(/:/g,'_');
function selectCurrentRow(table,index){ 
    // get all global object keys since primeface put its widget as global
   var keys=Object.keys(window),eventTableVar; 
   // Iterate over global objects to find targeted tables witn String startwidth match 
   for(var i=0;i<keys.length;i++){
    if(keys[i].lastIndexOf("eventTableVar_",0)==0){
     //Get instance and do what you want.
     eventTableVar=window[ keys[ i ] ];
     eventTableVar.unselectAllRows();
    }
   }
   table.selectRow(index ,false);
  };