<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[maxwheel的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/maxwheel</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; maxwheel]]></copyright><item><title><![CDATA[配合vue-route更优雅的实现懒加载（lazy-load），显示Loading加载状态]]></title><link>https://blog.youkuaiyun.com/maxwheel/article/details/119909207</link><guid>https://blog.youkuaiyun.com/maxwheel/article/details/119909207</guid><author>maxwheel</author><pubDate>Wed, 25 Aug 2021 14:37:04 +0800</pubDate><description><![CDATA[一般情况下，在Vue中引入组件，我们都会使用：


import MyComponent from './MyComponent.vue';

在大型项目中，我们经常需要进行分隔代码（split code），以免产生过大的单一文件。Vue router的文档中有推荐的使用方式：


const MyComponent = () =&gt; import('./MyComponent.vue');

结合webpack的配置，在build过程中此chunk会被从app.js提出单独打包。在前端页面路由到相应功]]></description><category></category></item><item><title><![CDATA[关于@vite/client 404]]></title><link>https://blog.youkuaiyun.com/maxwheel/article/details/118994677</link><guid>https://blog.youkuaiyun.com/maxwheel/article/details/118994677</guid><author>maxwheel</author><pubDate>Thu, 22 Jul 2021 11:15:45 +0800</pubDate><description><![CDATA[多发生于项目从webpack迁移至vite的过程。虽然debug比较麻烦，但是解决方法意外简单。



如果你在vite.config.js里添加了类似


  resolve: {
    extensions: ['.vue', '.js', '.json' ],
    alias: [
      { find: "@", replacement: path.resolve(__dirname, './src') },
    ],
  },

这样的兼容逻辑，那么在extensions数组里加入"]]></description><category></category></item><item><title><![CDATA[go httpmock无法拦截请求]]></title><link>https://blog.youkuaiyun.com/maxwheel/article/details/109501767</link><guid>https://blog.youkuaiyun.com/maxwheel/article/details/109501767</guid><author>maxwheel</author><pubDate>Wed, 04 Nov 2020 23:38:59 +0800</pubDate><description><![CDATA[今天测试时候发现用httpmock包，无论如何设置都无法拦截请求。

后来查询文档https://godoc.org/github.com/jarcoal/httpmock#RegisterResponder， 发现默认只拦截http.Client发送的请求，即



	client := &amp;http.Client{}
	resp, err := client.Do(req)

而之前用的是


tr := &amp;http.Transport{
    // TLSClientConfig:..]]></description><category></category></item><item><title><![CDATA[控制iframe的小技巧]]></title><link>https://blog.youkuaiyun.com/maxwheel/article/details/94465543</link><guid>https://blog.youkuaiyun.com/maxwheel/article/details/94465543</guid><author>maxwheel</author><pubDate>Tue, 02 Jul 2019 18:42:47 +0800</pubDate><description><![CDATA[做web ssh时遇到一个问题：想要手工建立一个iframe，然后在其中添加DOM组件，但是发现各浏览器对iframe的行为不同。

测试浏览器： chrome75.0.3770.100, firefox60.7.2esr, firefox 67.0.4

测试代码：


&lt;html&gt;
&lt;head&gt;&lt;/head&gt;
&lt;body&gt;
&lt;div&g...]]></description><category></category></item><item><title><![CDATA[关于浮动菜单在点击之前自动隐藏的问题]]></title><link>https://blog.youkuaiyun.com/maxwheel/article/details/88065257</link><guid>https://blog.youkuaiyun.com/maxwheel/article/details/88065257</guid><author>maxwheel</author><pubDate>Fri, 01 Mar 2019 18:21:50 +0800</pubDate><description><![CDATA[做div浮动菜单，需要在点击菜单项之后再消失整个菜单，但是如果简单在外层div中设置onblur的话，就会在内层菜单触发点击之前隐藏掉整个菜单导致点击不生效。

简单搜索了一下，大概有设置全屏透明层和在内层的onmousedown里设置preventDefault的方法。但是如果用React或vue之类的框架，有一种不知道算是简单还是复杂的方法，即在外层菜单同时设置onfocus和onblur， ...]]></description><category></category></item><item><title><![CDATA[Firefox的请求头不带Cookie]]></title><link>https://blog.youkuaiyun.com/maxwheel/article/details/87977349</link><guid>https://blog.youkuaiyun.com/maxwheel/article/details/87977349</guid><author>maxwheel</author><pubDate>Wed, 27 Feb 2019 16:10:14 +0800</pubDate><description><![CDATA[最近开发前端，发现Firefox的请求头没有带Cookie字段，但是Safari和Chrome却带着，百思不得其解。

 

后来发现，因为使用了whatwg-fetch库，但是fetch options没有加credential: same-origin，而ff和chrome的默认行为居然还不一样。。坑...]]></description><category></category></item><item><title><![CDATA[前端JS的一些小坑]]></title><link>https://blog.youkuaiyun.com/maxwheel/article/details/86647509</link><guid>https://blog.youkuaiyun.com/maxwheel/article/details/86647509</guid><author>maxwheel</author><pubDate>Fri, 25 Jan 2019 15:55:26 +0800</pubDate><description><![CDATA[1. typeof(null) == 'object'

2. document.cookie对于httpOnly的cookie无法读取]]></description><category></category></item><item><title><![CDATA[scroll-view的横向滚动]]></title><link>https://blog.youkuaiyun.com/maxwheel/article/details/85642183</link><guid>https://blog.youkuaiyun.com/maxwheel/article/details/85642183</guid><author>maxwheel</author><pubDate>Wed, 02 Jan 2019 21:52:56 +0800</pubDate><description><![CDATA[本来以为实现一个横向滚动的view很简单，但是实际上还是有个小坑的。因为scroll-view本身的display:flex不生效。

scroll-view的内层view元素需要：


display: inline-block

scroll-view的外层元素需要：


white-space: nowrap

使得内部组件不换行。

再加上一些左右空行的渐变修饰，使得一个简单的横向滚动元素...]]></description><category></category></item><item><title><![CDATA[用movable-view实现可拖拽的列表元素]]></title><link>https://blog.youkuaiyun.com/maxwheel/article/details/85640025</link><guid>https://blog.youkuaiyun.com/maxwheel/article/details/85640025</guid><author>maxwheel</author><pubDate>Wed, 02 Jan 2019 21:18:42 +0800</pubDate><description><![CDATA[wxml： 


&amp;lt;movable-view class=&quot;outer&quot;&amp;gt;
    &amp;lt;movable-item class=&quot;inner&quot; wx:for=&quot;sequence&quot;
        bind:change=&quot;onChange&quot; bind:touchstart=&quot;touchstart&quot; bind:touchend=&quot;touchend&quot;&am]]></description><category></category></item><item><title><![CDATA[QQ输入法截图屏幕自动放大]]></title><link>https://blog.youkuaiyun.com/maxwheel/article/details/54602406</link><guid>https://blog.youkuaiyun.com/maxwheel/article/details/54602406</guid><author>maxwheel</author><pubDate>Wed, 18 Jan 2017 16:29:42 +0800</pubDate><description><![CDATA[QQ输入法的Ctrl+shift+Q截图相当方便，但是WIN7下高分屏开启了DPI放大时，这样截图会造成屏幕自动放大。
解决方法是找到qq输入法安装文件夹，右键SnapShot.exe，选择兼容性，勾选“禁止高DPI时自动放大(Disable display scaling on high DPI settings)”即可。]]></description><category></category></item><item><title><![CDATA[django框架从零开始_011_测试view]]></title><link>https://blog.youkuaiyun.com/maxwheel/article/details/51471215</link><guid>https://blog.youkuaiyun.com/maxwheel/article/details/51471215</guid><author>maxwheel</author><pubDate>Sat, 21 May 2016 17:06:20 +0800</pubDate><description><![CDATA[参考：https://docs.djangoproject.com/en/1.9/intro/tutorial05/


上一个测试我们了解到了如何测试一个方法是否如我们预期的工作方式一致，接下来我们来看看其他功能。django提供了一个测试客户端，可以在view层面模拟用户的操作。我们可以在tests.py或者shell中使用它。
让我们从shell开始。在shell测试中我们需要一些在]]></description><category></category></item><item><title><![CDATA[django框架从零开始_010_自动化测试]]></title><link>https://blog.youkuaiyun.com/maxwheel/article/details/51408665</link><guid>https://blog.youkuaiyun.com/maxwheel/article/details/51408665</guid><author>maxwheel</author><pubDate>Sat, 14 May 2016 22:00:49 +0800</pubDate><description><![CDATA[参考：https://docs.djangoproject.com/en/1.9/intro/tutorial05/


为什么需要自动化测试？因为这可以在你的程序修改的时候告诉你是否对原先功能产生影响。不同于之前的手动测试，自动化测试是你预先创建一部分例子，在你修改代码后运行这些例子然后检查结果是否仍是你需要的。这样就可以省去每一次手工测试的时间。在实际生产中，这种自动化测试是必不可少的。]]></description><category></category></item><item><title><![CDATA[django框架从零开始_009_通用页面]]></title><link>https://blog.youkuaiyun.com/maxwheel/article/details/51378796</link><guid>https://blog.youkuaiyun.com/maxwheel/article/details/51378796</guid><author>maxwheel</author><pubDate>Wed, 11 May 2016 22:15:08 +0800</pubDate><description><![CDATA[参考：https://docs.djangoproject.com/en/1.9/intro/tutorial04/#use-generic-views-less-code-is-better


我们做的detail、result、index的界面非常简单，但是同时，也很冗余。这些页面做了标准网页开发应该做的事情：根据url从数据库中读取数据、加载模版页并显示出来。这种应用太常见了，所以d]]></description><category></category></item><item><title><![CDATA[django框架从零开始_008_页面元素 表单处理]]></title><link>https://blog.youkuaiyun.com/maxwheel/article/details/51348578</link><guid>https://blog.youkuaiyun.com/maxwheel/article/details/51348578</guid><author>maxwheel</author><pubDate>Sun, 08 May 2016 23:35:55 +0800</pubDate><description><![CDATA[参考：https://docs.djangoproject.com/en/1.9/intro/tutorial04/


我们现在来练习更多的views相关的表单处理方式。下面来更新一下polls/detail.html页面，如下：

{{ question.question_text}} 
{% if error_message %} {{error_message}} {%endif]]></description><category></category></item><item><title><![CDATA[django框架从零开始_007_view以及模版页]]></title><link>https://blog.youkuaiyun.com/maxwheel/article/details/51340887</link><guid>https://blog.youkuaiyun.com/maxwheel/article/details/51340887</guid><author>maxwheel</author><pubDate>Sun, 08 May 2016 00:12:54 +0800</pubDate><description><![CDATA[参考：https://docs.djangoproject.com/en/1.9/intro/tutorial03/#write-views-that-actually-do-something


下面让我们来做一些真正有意义的view页面。一个view应该要么返回一个包含请求页面内容的HttpResponse，或者抛出一个异常（比如Http404）。而在view处理过程中你可以做任何你需]]></description><category></category></item><item><title><![CDATA[django框架从零开始_006_draft views]]></title><link>https://blog.youkuaiyun.com/maxwheel/article/details/51326942</link><guid>https://blog.youkuaiyun.com/maxwheel/article/details/51326942</guid><author>maxwheel</author><pubDate>Thu, 05 May 2016 22:32:20 +0800</pubDate><description><![CDATA[参考：https://docs.djangoproject.com/en/1.9/intro/tutorial03/


来到的MVC的views。我们的例子polls需要四种页面：


Question的主页面 —— 显示最近的几个questionsQuestion的细节页面 —— 显示Question和choicesQuestion的结果页面 —— 显示选择的答案结果Action ]]></description><category></category></item><item><title><![CDATA[django框架从零开始_005_管理界面]]></title><link>https://blog.youkuaiyun.com/maxwheel/article/details/51308475</link><guid>https://blog.youkuaiyun.com/maxwheel/article/details/51308475</guid><author>maxwheel</author><pubDate>Tue, 03 May 2016 22:47:30 +0800</pubDate><description><![CDATA[参考：https://docs.djangoproject.com/en/1.9/intro/tutorial02/#introducing-the-django-admin


django为内容的增删改查设置了自动化界面，就是这里要介绍的管理界面。
受限先来建一个用来登录的超级用户：

python manage.py createsuperuser




admin ]]></description><category></category></item><item><title><![CDATA[django框架从零开始_004_数据库_API]]></title><link>https://blog.youkuaiyun.com/maxwheel/article/details/51308038</link><guid>https://blog.youkuaiyun.com/maxwheel/article/details/51308038</guid><author>maxwheel</author><pubDate>Tue, 03 May 2016 21:46:50 +0800</pubDate><description><![CDATA[参考：https://docs.djangoproject.com/en/1.9/intro/tutorial02/#playing-with-the-api


设置好了model，我们可以接触一下django提供的python shell APIs。执行

python manage.py shell





可以看到我们进入了一个python shell。之所以使用m]]></description><category></category></item><item><title><![CDATA[django框架从零开始_003_数据库]]></title><link>https://blog.youkuaiyun.com/maxwheel/article/details/51306265</link><guid>https://blog.youkuaiyun.com/maxwheel/article/details/51306265</guid><author>maxwheel</author><pubDate>Tue, 03 May 2016 17:20:39 +0800</pubDate><description><![CDATA[参考：https://docs.djangoproject.com/en/1.9/intro/tutorial02/


django支持主流的数据库，包括oracle、mysql、postgre、sqlite。如果只是初探，django提供了默认sqlite的配置，无需再安装其他的。在这里我们尝试使用postgre。
我下载的版本是postgre 9.5.2-1 winx64版，安装完毕]]></description><category></category></item><item><title><![CDATA[django框架从零开始_002_helloworld]]></title><link>https://blog.youkuaiyun.com/maxwheel/article/details/51299028</link><guid>https://blog.youkuaiyun.com/maxwheel/article/details/51299028</guid><author>maxwheel</author><pubDate>Mon, 02 May 2016 23:20:59 +0800</pubDate><description><![CDATA[参考：https://docs.djangoproject.com/en/1.9/intro/tutorial01/


环境搭建成功，开始搭建示例project。
cmd到你希望保存的目录，运行：

django-admin startproject mysite


虽然没有输出，但是dir一下就能看到效果。
注1：site名字不要用特殊词汇，比如django、test，等]]></description><category></category></item></channel></rss>