6.22-6.27 JLL--实习日志--Ajax+js 端实现

实现的效果图如下
需要和数据库时时交互

其中遇到的问题

1.1 怎么实现初始化的时候自动的跳转到 对应的Yes/No 的界面,我的理解是前端需要自动的改变class=”switch-right switch-primary switch-small” switch-right变成 switch-left 是需要通过js ?
解决方案是写一个js ,应该
注意延迟加载,
注意jquery的写法$(b).removeClass('switch-on');
注意 getElementsByClassName("switch-on")[0];
得到的结果是list类型的数据
注意 有一个层次性 先通过id 然后通过class获得对应下面的对象

 <script type="text/javascript">
  setTimeout(function(){
var b  = document.getElementById("{{ field.html_name }}").getElementsByClassName("switch-on")[0];
 $(b).removeClass('switch-on');
 $(b).addClass('switch-off');
  },2000);

错误的方式 :
达成的效果,所有的标签都是变成off 的状态

   setTimeout(function(){ 
 var b  = document.getElementById("{{ field.html_name }}").getElementsByClassName("switch-on")[0];
$(b).removeClass('switch-on');
$(b).addClass('switch-off');
 },2000);

1.2 调用一次以后没有办法持续的跟踪。现在的js 只能实现一次
解决的方案:写js 的地方不正确,应该写在每一个生成标签的下面,需要注意作用区间

1.3 change_condition 函数里面怎么取前端对应的属性值 现在没有传到后端,ajax 的方式是第一次尝试,

前端
注意 利用jquery 找到某id 下 的label 标签的js 写法var c = $("#{{ field.html_name }}").find("label[for ='a']"); 这也是一个list类型的
注意 ajax的get方式传递函数的方式 $.get("",function(){})

  <script type="text/javascript">
setTimeout(function(){
 value_of = '';
 var c = $("#{{ field.html_name }}").find("label[for ='a']");
 for (var i = 0; i < c.length; i++) {
 c[i].addEventListener('click',function(){
 var b  = document.getElementById("{{ field.html_name }}").getElementsByClassName("switch-on")[0];
if (b!==undefined) 
 {
     value_of = 'NO';
  } else{
    value_of =  'True';  
};                                     $.get("/property/change_conditon/{{property_instance.id}}/?a={{field.html_name}}&b="+value_of,function(){});
   });
  }},100)
  </script>                                        

view 端
注意点 传入property_id这个值找到property_instance,然后去Property_Extension里面filter 如果没有property_extension_instance,就需要自己创建一个 ???怎么会没有呢

注意点 :python 通过string 类型找到对应的attribute ,使用内置函数#__dict__['color'] 就可以了 !!

def change_condition(request, property_id):
  if request.is_ajax():
        html_name =str(request.GET.get('a'))
        value_of = str(request.GET.get('b'))
property_instance=get_object_or_404(Property,pk=int(property_id),RecordEndDate="NULL")     property_extension_instance=Property_Extension.objects.filter(Q(Property=property_instance)).first()
  if not property_extension_instance:
  property_extension_instance = Property_Extension(Property=property_instance)
        if not can_control(property_instance, request):
            return views.page_not_found(request)
        print property_extension_instance.__dict__[html_name]
        property_extension_instance.__dict__[html_name] = value_of   
        property_extension_instance.save()
        return HttpResponse()

1.4 form 的检查机制有问题 formFieldLocalisation 的 函数 ,会报错
因为了leon 改动了 locsation 增加了一个 data_model_label_interface 作用是可以替换 用户 替换不同的 语言显示
在 localisation.py里面增加一行 default_label_setting = localisation.data_model_label_interface
在 form 端 error_messages={'required': data_model_label_setting.get('PleaseEnterNewPassword') },
在 model u端 EmployeeDepartment = models.CharField(data_model_label_setting.get('EmployeeDepartment'), max_length=255, default="")

1.5 出现 点击一次,后台传输两次的情况,因为change 捕捉到滑动这个动作是一个持续性问题,在一段时间内持续触发 所以有两次的情况
前端触发的方式不正确 ,一开始用change 的方式触发,因为这是一个持续性动作,所以某个时间内持续,会被认为触发两次 ,改动的方式是通过其他的方式进行触发 ,
注意bind 事件和 on ,ready 三者区别 ???
注意 mouseup touchend 两个 事件 和change 的区别, 前者是有一个过程的,后者是一个 瞬间的变化

  $('#{{ field.html_name }}').bind("mouseup touchend",function() {setTimeout(function(){
 var value_of = '';
 var b  = document.getElementById("{{ field.html_name }}").getElementsByClassName("switch-on")[0];
if (b!==undefined) 
{
value_of = 'NO';                                 }
else{
  value_of =  'True';  
 };                                      
 $.get("/property/change_conditon/{{property_instance.id}}/?a{{field.html_name}}&b="+value_of,function(){
 });
 },100)
 });

1.6 空白框部分点击没有反应 ! 原因是因为没有绑定事件在这个上面,我们需要手动绑定
注意 利用jquery 找到某id 下 的label 标签的js 写法var c = $("#{{ field.html_name }}").find("label[for ='a']"); 这也是一个list类型的
注意 通过循环的方式给label 标签增加 事件的方式!!

  <script type="text/javascript">
setTimeout(function(){
 value_of = '';
 var c = $("#{{ field.html_name }}").find("label[for ='a']");
 for (var i = 0; i < c.length; i++) {
 c[i].addEventListener('click',function(){
 var b  = document.getElementById("{{ field.html_name }}").getElementsByClassName("switch-on")[0];
if (b!==undefined) 
 {
     value_of = 'NO';
  } else{
    value_of =  'True';  
};
                                      $.get("/property/change_conditon/{{property_instance.id}}/?a={{field.html_name}}&b="+value_of,function(){});
 });
  }
 },100)
 </script>                                      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值